5.3 Nginx服务器的事件驱动模型

Nginx服务器的工作进程调用IO后,就去进行其他工作了;当IO调用返回后,会通知工作进程。这里有一个问题,IO调用是如何把自己的状态通知给工作进程的呢?

一般解决这个问题的方案有两种。

  • 一是,让工作进程在进行其他工作的过程中间隔一段时间就去检查一下IO的运行状态(轮询),如果完成,就去响应客户端,如果未完成,就继续正在进行的工作;

  • 二是, IO调用在完成后能主动通知工作进程

select/poll/epoll/kqueue等这样的系统调用就是用来支持第二种解决方案的。这些系统调用,也常被称为,它们提供了一种机制,让进程可以同时处理多个并发请求,不用关心IO调用的具体状态。IO调用完全由事件驱动模型来管理,事件准备好之后就通知工作进程事件已经就绪。

事件驱动处理库又被称为多路IO复用方法,最常见的包括以下三种:select模型poll模型epoll模型。Nginx服务器还支持rtsig模型kqueue模型dev/poll模型eventport模型等。通过Nginx配置可以使得Nginx服务器支持这几种事件驱动处理模型。

Last updated

Was this helpful?