- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解 Nginx 为何如此之快,但我有几个问题。
据我了解,Apache 要么生成一个新进程来服务每个请求,要么生成一个新线程来服务每个请求。由于每个新线程共享虚拟地址空间,因此如果有大量并发请求传入,内存使用量就会不断攀升。
Nginx 通过只有一个监听进程(Master)、一个执行线程和 2 或 3 个(数量可配置)工作进程来解决这个问题。该主进程/线程正在运行事件循环。有效地等待任何传入的请求。当请求到来时,它会将请求发送给其中一个工作进程。
以上理解如有不正确之处请指正
如果以上正确,那么我有几个问题:
工作进程是否会产生多个线程并遇到与 apache 相同的问题?
或者 nginx 速度快是因为它基于事件的架构在底层使用了非阻塞 IO。也许工作进程会生成仅执行非阻塞 IO 的线程,是这样吗?
“到底”是什么“基于事件的架构”,有人可以真正简化它,让像我这样的人能够理解吗?它只与非阻塞 io 还是其他相关?
我得到了c10k的引用,我正在尝试详细了解它,但我不认为它与基于事件的拱门有关。似乎更适合非阻塞 IO。
最佳答案
Apache 使用多个线程为每个请求提供它自己的执行线程。这是避免使用同步 I/O 时发生阻塞所必需的。
Nginx 仅使用异步 I/O,这使得阻塞不再是问题。 nginx使用多进程的唯一原因是为了充分利用多核、多CPU和超线程系统。即使有 SMP 支持,内核也无法在多个 CPU 上调度单个执行线程。每个逻辑 CPU 至少需要一个进程或线程。
所以区别在于,nginx仅需要足够的工作进程来充分利用 SMP,而 Apache 的架构需要创建一个新线程(每个线程都有自己的堆栈)每个请求约 8MB)。显然,在高并发情况下,Apache 将使用更多的内存,并因维护大量线程而承受更大的开销。
关于apache - nginx : Its Multithreaded but uses multiple processes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4764731/
我是一名优秀的程序员,十分优秀!