Nginx采用多进程单线程事件驱动模型,每个worker进程绑定一个CPU核心,基于epoll/kqueue异步非阻塞处理连接;worker_processes应设为auto以匹配核心数,避免资源闲置或争抢。

Nginx 默认采用多进程模型,每个 worker 进程绑定到一个 CPU 核心上运行,从而有效利用多核处理器的并行能力,避免单线程阻塞导致的资源浪费。
worker 进程与 CPU 核心的绑定关系
Nginx 启动时会根据 worker_processes 配置创建多个独立进程,推荐设为 CPU 核心数(如 auto),每个进程由操作系统调度到不同核心执行。这种设计让请求处理在多个核心上真正并行,而非仅靠线程切换模拟并发。
- 可通过 lscpu 或 nproc 查看实际 CPU 核心数
- 配置示例:worker_processes auto;
- 若设置为 1,即使机器有 16 核,也仅用 1 个核心,其余闲置
每个 worker 是单线程、事件驱动的
每个 worker 进程内部不使用多线程,而是基于 epoll(Linux)或 kqueue(BSD)等高效 I/O 多路复用机制,以异步非阻塞方式处理成千上万连接。这避免了线程上下文切换开销和锁竞争问题。
- worker 内部无阻塞调用(如同步磁盘读写、长耗时 Lua 脚本需特别注意)
- 静态文件服务、反向代理、TLS 握手等关键路径均为此模型优化
- 可通过 worker_connections 控制单个 worker 最大并发连接数
避免多进程带来的常见误区
多进程提升的是 CPU 利用率和吞吐量,但不等于自动解决所有性能瓶颈。例如:共享内存(如 limit_req、ssl_session_cache)需进程间协同;日志写入若未配置缓冲或异步,可能引发多进程争抢磁盘 I/O。
- 启用 accept_mutex on(默认)可减少惊群效应
- 日志建议使用 buffer 和 flush 参数降低写频次
- 动态模块或第三方模块若非进程安全,可能引发状态不一致
多进程 + 单线程事件循环是 Nginx 高并发低开销的核心设计,合理配置后能充分释放多核性能,但需结合实际负载场景调整参数,而非简单堆砌进程数。










