Hello!
2012/10/17 夏巍巍:
> 您好,我想请教您一个问题。
> 我想把协程(coroutine)的概念引入web服务器中,这样就可以多个请求在多个协程中处理,
> 而不是在多个线程中,这样可以支持高并发。但是ngix应该是基于回调的机制的,在某个链接上有事件发生时,回调某个函数,该函数可以是用户自定义的module等,这样的话多个事件在同一线程中一定是顺序执行的!!!也就几乎没办法在同一个线程中,实现多个链接并发执行。是不是我这种需求只能自己重新写一个
> web服务器。通过扩展nginx是不是无法实现?
我们的 ngx_lua 模块早已经把 Lua coroutine 引入到了 Nginx 中实现“同步非阻塞”和“轻量级线程”的 Lua
编程模型,并且早已达到了生产级别:
http://wiki.nginx.org/HttpLuaModule
你有兴趣的话,可以参考一下这个模块的文档和实现。
Nginx 本身在 C API 级别上是基于回调的,但并不意味着我们在支持 coroutine 的 Lua 语言中也得搞一堆的回调。
因为每个 Nginx worker 进程是单 OS 线程的,所以所有的 Lua 代码是每个 nginx worker
进程内部本质上都是*串行并发*执行的,但这并不影响多个 Lua coroutine 之间按 I/O 事件或者其他方式进行 CPU
时间片的用户态切分。
同时抄送给 openresty 中文邮件列表:https://groups.google.com/group/openresty
(国内访问可能需要翻墙)也欢迎你加入该列表,并在那里和我们交流这样的问题。
Best regards,
-agentzh