本章节介绍 Nginx 支持的各种事件模型。
| 模型 | 平台 | 说明 | 性能 |
|---|---|---|---|
epoll | Linux | 高效的事件通知方法 | 最高 |
kqueue | FreeBSD, macOS | 高效的事件通知方法 | 最高 |
eventport | Solaris 10 | 事件端口 | 高 |
/dev/poll | Unix | 轮询设备 | 中 |
select | 通用 | 可移植但效率低 | 低 |
poll | 通用 | 可移植但效率低 | 低 |
事件模型原理: 事件模型是 Nginx 处理 I/O 事件的核心机制。不同的事件模型有不同的实现方式和性能特点。Nginx 支持多种事件模型,以适应不同的操作系统平台。
适用平台:Linux 2.6+
特点:
工作原理:
epoll_create:创建一个 epoll 实例,返回一个文件描述符epoll_ctl:向 epoll 实例添加、修改或删除需要监听的文件描述符epoll_wait:等待 I/O 事件的发生,返回发生事件的文件描述符列表适用平台:FreeBSD, macOS
特点:
工作原理:
kqueue:创建一个 kqueue 实例kevent:向 kqueue 实例添加、修改或删除需要监听的事件kevent:等待事件的发生,返回发生的事件列表适用平台:Solaris 10
特点:
工作原理:
port_create:创建一个事件端口port_associate:将文件描述符与事件端口关联port_get:等待事件的发生,返回发生的事件列表适用平台:Unix
特点:
工作原理:
/dev/poll 设备/dev/poll 设备/dev/poll 设备读取发生事件的文件描述符列表适用平台:通用
特点:
工作原理:
select:监听文件描述符的可读、可写、异常事件select:返回发生事件的文件描述符列表适用平台:通用
特点:
工作原理:
poll:监听文件描述符的可读、可写、异常事件poll:返回发生事件的文件描述符列表Nginx 会自动选择最适合平台的事件模型。
自动选择原理:
Nginx 在编译时会检测当前平台支持的事件模型,并在运行时自动选择最高效的事件模型。例如,在 Linux 上会自动选择 epoll,在 FreeBSD 上会自动选择 kqueue。
events {
use epoll;
}
手动指定说明:
如果需要手动指定事件模型,可以在 events 块中使用 use 指令指定。