【发布时间】:2011-06-13 11:28:56
【问题描述】:
我想了解是什么让 Nginx 如此之快,我有几个问题。
据我了解,Apache 要么生成一个新进程来服务每个请求,要么生成一个新线程来服务每个请求。由于每个新线程共享虚拟地址空间,因此如果有大量并发请求进入,内存使用量会不断攀升。
Nginx 通过只有一个监听进程(Master)、一个执行线程和 2 或 3 个(数量可配置)工作进程来解决这个问题。这个主进程/线程正在运行一个事件循环。有效地等待任何传入的请求。当一个请求进来时,它会将该请求提供给其中一个工作进程。
如果我的上述理解不正确,请纠正我
如果以上是正确的,那么我有几个问题:
-
工作进程不会产生多个线程并遇到与 apache 相同的问题吗?
-
或者 nginx 速度很快,因为它基于事件的架构在其底层使用了非阻塞 IO。也许工作进程会产生仅非阻塞 IO 的线程,是这样吗?
-
“确切地说”是“基于事件的架构”,有人可以真正简化它,让像我这样的人理解。它只是与非阻塞 io 或其他东西有关吗?
我得到了c10k 的引用,我正在尝试通过它,但我不认为它与基于事件的拱门有关。似乎更多的是非阻塞 IO。
【问题讨论】:
-
非阻塞 IO 需要基于事件的架构。
-
仅供参考 - 以防你有兴趣深入挖掘 - 我已经将答案与其他材料 + 视频一起写在这里:planetunknown.blogspot.com/2011/02/…
-
Apache 并不是因为它创建的线程太多而慢,而是因为它们之间的上下文切换,这比执行指令消耗的 CPU 时间片要多。
标签: apache architecture nginx