Nginx 高效依赖异步事件驱动模型:基于非阻塞 I/O、epoll 机制、单线程事件循环及 Master-Worker 架构,实现单进程高并发、低延迟与稳定扩展。
Nginx 实现高效网络服务,靠的不是堆线程或进程,而是把“等”这件事彻底去掉——用异步事件驱动模型,让一个工作进程同时盯住成千上万个连接,只在真正有事发生时才出手。
所有 socket 操作(accept、read、write)都设为非阻塞模式。这意味着调用 read() 时,如果当前没有数据可读,不会卡住进程,而是立刻返回错误码 EAGAIN 或 EWOULDBLOCK;写操作同理。这样工作进程始终处于“可调度”状态,不会因单个连接的延迟而闲置。
在 Linux 系统上,Nginx 默认选用 epoll 作为事件通知机制。它能高效监控大量文件描述符(FD),且时间复杂度接近 O(1),远优于 select/poll 的 O(n)。
use epoll; 显式声明(虽默认启用,但建议保留)每个 worker 进程内部运行一个无限循环:等待事件 → 分发处理 → 更新定时器 → 继续等待。这个循环不依赖线程切换,全程在用户态高效流转。
ngx_epoll_process_events,位于源码 src/event/modules/ngx_epoll_module.c
异步事件驱动运行在 worker 进程内,而 master 进程负责统筹:加载配置、启动 worker、平滑重启、异常拉起。两者分工明确,互不干扰。