Hello!
2012/10/17 夏巍巍:
> 每个 Nginx worker 进程是单 OS 线程的, 所以我理解的,nginx把请求给 一个Nginx worker 进程后,会直到该Nginx
> worker 进程处理完成后,才会把下一个请求给该Nginx worker 进程处理吧?
当然不是。你描述的是 Apache httpd 的 prefork mpm 的请求处理模型,而不是 Nginx 的。
在 Nginx 中,当一个请求发起的任何一个非阻塞的 I/O 操作(比如 socket 读、写、连接等)返回 EAGAIN 时,Nginx
便会立即转向处理其他可以立即处理的请求,或者阻塞在 epoll_wait 这样的系统调用上静静等待下一轮的 I/O 事件。简言之,Nginx
的调度粒度是一个一个的 I/O 事件,而不是一个一个的请求。
> 如果是这样的话,在Nginx worker
> 进程中搞协程就没有意义了吧?
>
建议多读源码,而不是单凭想象来进行判断。
推荐下面这一篇经典文章来补充相关的基础知识:
http://www.kegel.com/c10k.html
这样我们的交流才会变得更有效率。
另:再次抄送 openresty 中文邮件列表:https://groups.google.com/group/openresty (我不太愿意回复线下的邮件)
Best regards,
-agentzh