【发布时间】:2011-03-27 02:15:29
【问题描述】:
我理解 Apache 使用的线程驱动:每个连接都会打开一个线程,当发送响应时,该线程会关闭,从而为其他线程释放资源。
但我不明白 Nginx 使用的事件驱动设计。我已经阅读了一些有关事件驱动设计的基础知识.. 但我不明白 nginx 如何使用它来处理 Web 请求。
我在哪里可以阅读和理解 Nginx 如何以事件驱动的方式处理连接,所以我知道为什么它更好,而不是仅仅接受基于事件的设计比线程驱动的设计更好。
【问题讨论】:
我理解 Apache 使用的线程驱动:每个连接都会打开一个线程,当发送响应时,该线程会关闭,从而为其他线程释放资源。
但我不明白 Nginx 使用的事件驱动设计。我已经阅读了一些有关事件驱动设计的基础知识.. 但我不明白 nginx 如何使用它来处理 Web 请求。
我在哪里可以阅读和理解 Nginx 如何以事件驱动的方式处理连接,所以我知道为什么它更好,而不是仅仅接受基于事件的设计比线程驱动的设计更好。
【问题讨论】:
Nginx 使用Reactor 模式。基本上,它是单线程的(但可以分叉多个进程以利用多个内核)。主事件循环等待操作系统发出就绪事件信号 - 例如该数据可用于从套接字读取,此时将其读入缓冲区并进行处理。单个线程可以非常高效地同时服务数万个连接(每个连接线程模型会失败,因为巨大的上下文切换开销以及大量内存消耗,因为每个线程都需要自己的堆栈) .
【讨论】: