gpt4 book ai didi

apache - nginx : Its Multithreaded but uses multiple processes?

转载 作者:行者123 更新时间:2023-12-02 01:29:41 24 4
gpt4 key购买 nike

我试图了解 Nginx 为何如此之快,但我有几个问题。

据我了解,Apache 要么生成一个新进程来服务每个请求,要么生成一个新线程来服务每个请求。由于每个新线程共享虚拟地址空间,因此如果有大量并发请求传入,内存使用量就会不断攀升。

Nginx 通过只有一个监听进程(Master)、一个执行线程和 2 或 3 个(数量可配置)工作进程来解决这个问题。该主进程/线程正在运行事件循环。有效地等待任何传入的请求。当请求到来时,它会将请求发送给其中一个工作进程。

以上理解如有不正确之处请指正

如果以上正确,那么我有几个问题:

  1. 工作进程是否会产生多个线程并遇到与 apache 相同的问题?

  2. 或者 nginx 速度快是因为它基于事件的架构在底层使用了非阻塞 IO。也许工作进程会生成执行非阻塞 IO 的线程,是这样吗?

  3. “到底”是什么“基于事件的架构”,有人可以真正简化它,让像我这样的人能够理解吗?它只与非阻塞 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com