5.3 Nginx服务器的事件驱动模型
Last updated
Was this helpful?
Last updated
Was this helpful?
Nginx服务器的工作进程调用IO后,就去进行其他工作了;当IO调用返回后,会通知工作进程。这里有一个问题,IO调用是如何把自己的状态通知给工作进程的呢?
一般解决这个问题的方案有两种。
一是,让工作进程在进行其他工作的过程中间隔一段时间就去检查一下IO的运行状态(轮询),如果完成,就去响应客户端,如果未完成,就继续正在进行的工作;
二是, IO调用在完成后能主动通知工作进程。
select/poll/epoll/kqueue等这样的系统调用就是用来支持第二种解决方案的。这些系统调用,也常被称为,它们提供了一种机制,让进程可以同时处理多个并发请求,不用关心IO调用的具体状态。IO调用完全由事件驱动模型来管理,事件准备好之后就通知工作进程事件已经就绪。
事件驱动处理库又被称为多路IO复用方法,最常见的包括以下三种:select模型、poll模型和epoll模型。Nginx服务器还支持rtsig模型、kqueue模型、dev/poll模型和eventport模型等。通过Nginx配置可以使得Nginx服务器支持这几种事件驱动处理模型。