Nginx响应速度本质为毫秒级,依赖单线程+异步非阻塞+epoll事件驱动;微秒级仅限缓存命中等极少数理想场景,并非通用性能承诺。

epoll 是高效监听的底层支撑
Linux 下 Nginx 默认使用 epoll 作为事件分发器,它不像 select/poll 那样轮询所有 socket,而是靠内核维护一个就绪列表,时间复杂度接近 O(1)。这意味着:当 1 万个连接里只有 2 个有数据可读时,epoll 只通知这 2 个,Nginx 不会白跑 9998 次检查。
非阻塞 I/O 让 worker 始终在线
所有网络操作(accept、recv、send)都设为非阻塞模式。比如读取请求头时若数据没到齐,Nginx 不会卡住等待,而是立刻挂起这个连接,转头处理其他就绪事件。等内核通知“数据到了”,再回来继续解析——整个过程不浪费 CPU 时间。
状态机驱动每个请求生命周期
每个连接不是靠线程独占,而是由一个轻量状态机推进:
- 从“等待新连接”开始
- 到“接收请求行→解析头部→读请求体”逐步流转
- 再到“查缓存/转发给上游/读磁盘文件”等不同分支
- 最后“写响应→关闭或复用连接”
每一步只做必要动作,完成后立即让出控制权,保证事件循环始终高吞吐。
零拷贝和缓存减少真实耗时
响应快不只是模型快,还得避开慢操作:
- 静态文件启用 sendfile on,数据直接在内核 page cache 和 socket buffer 间传输,省掉用户态内存拷贝
- 高频小文件加 open_file_cache,避免反复 open/stat 系统调用
- 反向代理开启 proxy_buffering on,防止后端慢响应拖住整个事件循环
可观测到的毫秒级响应,大多来自这些协同优化;所谓“微秒级”,通常只出现在空响应、本地缓存命中或 Unix socket 直连等极简路径中。



















