关于Nginx_Lua模块的使用问题

笑天居士 2014-06-29 09:57:04
看到一些高并发的应用场景,如淘宝等,直接利用nginx_lua模块,将一些业务逻辑写到了lua脚本中

有一点不太明白,如果某一个业务比较耗时,那么不就也是阻塞执行了吗?

我做了个简单的测试,nginx起一个worker,里面调用lua,在lua加一个sleep(60),就阻塞了,其它客户端的访问均阻塞了

不知道,是不是我用的不对,还是我理解的不对,望高手指点,谢谢!

location /lua2 {
set $test "hello, world, world.";
content_by_lua '
os.execute("sleep " .. 60);
ngx.header.content_type = "text/plain";
ngx.say(ngx.var.test);
';
}
...全文
689 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
笑天居士 2014-06-30
  • 打赏
  • 举报
回复
这个我有点明白了,nginx_lua模块,调用mc或mysql等业务逻辑时,用的是lua协程的概念去实现的,协程不会阻塞主进程 而os.execute("sleep " .. 60)应该是在主进程中阻塞了 我试了下用nginx_lua模块访问gearman,即使业务处理时间长,也不会阻塞其它客户端的请求的
业余草 2014-06-30
  • 打赏
  • 举报
回复
nginx真的很火的,值得我们学习
MiceRice 2014-06-30
  • 打赏
  • 举报
回复
引用 1 楼 xtjsxtj 的回复:
这个我有点明白了,nginx_lua模块,调用mc或mysql等业务逻辑时,用的是lua协程的概念去实现的,协程不会阻塞主进程 而os.execute("sleep " .. 60)应该是在主进程中阻塞了 我试了下用nginx_lua模块访问gearman,即使业务处理时间长,也不会阻塞其它客户端的请求的
理解正确。

25,984

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧