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

什么是事件驱动模型

事件驱动概念:在持续的事物管理过程中,由当前时间节点上出现的事件引起的调用可用资源执行相关任务,解决问题,防止事物堆积的一种策略。
一般由:事件收集器、事件发送器和事件处理器组成。

事件驱动处理库

又称为多路IO复用方法:主要包括以下几种:

select库

  1. 创建所关注事件的描述符集合,每个描述符,可以关注读事件、写事件以及异常发生事件。
  2. 调用底层的select函数,等待事件发生。
  3. 轮询所有事件描述符集合中的每一个事件描述符,检查是否有相应的事件发生,如果有,就进行处理。

    poll库

    Linux下平台的基本事件驱动模型。基本工作方式与select库相同。
    区别在于:select库需要为读事件、写事件和异常事件分别创建一个描述符集合,因此在最后轮询的时候,需要分别轮询三个集合。而poll库只需要创建一个集合。轮询的时候同时检查三种事件是否发生。

    epoll库

    Nginx服务器支持的高性能事件驱动库。主要的改动是:把描述符列表的管理交由内核负责,一旦有某种事件发生,内核把发生的事件的描述列表通知给进程,这样就避免了轮询整个描述符列表。
  4. epoll库通过相关调用通知内核创建一个有N个描述符的事件列表。然后给这些描述符设置关注的事件,并添加到内核的事件列表中去。
  5. 完成设置之后,epoll库就开始等待内核通知事件发生。一旦发生,内核将发生事件的描述符上报给epoll库。

    rtsig模型

    Real-time signal,实时信号。使用rtsig时,工作进程会通过系统内核建立一个rtsig队列用于存放标记事件发生的信号。每个事件发生时,系统内核就会产生一个信号存放在rtsig队列中等待工作进程的处理。