nginx采用master-worker多进程架构实现高效并发:master以root权限负责配置加载、进程管理与信号处理,worker独立运行、事件驱动、无锁竞争连接,通过accept_mutex避免惊群,支持cpu亲和与故障隔离。

nginx 的多进程架构通过明确分工实现高效并行执行:Master 进程不处理请求,只做调度和监管;Worker 进程各自独立、互不干扰地处理网络连接。
Master 负责统筹与协调
Master 是唯一以 root 权限启动的进程,它完成配置加载、监听套接字创建、Worker 进程派生与回收等全局任务。它不参与实际 I/O,而是通过 fork() 启动多个 Worker 子进程,并持续监控其状态。当某个 Worker 异常退出(如段错误或被 kill -9),Master 会立即调用 waitpid(WNOHANG) 捕获退出信号,并拉起新进程补足数量,确保 worker_processes 数量恒定。
Worker 独立竞争连接,避免锁开销
所有 Worker 进程共享同一个监听 socket(文件描述符继承自 Master),但通过 accept_mutex 机制控制接入权——同一时刻仅一个 Worker 尝试 accept 新连接,避免“惊群”。每个 Worker 都是单线程、非阻塞、事件驱动的,基于 epoll/kqueue 处理数千并发连接。请求一旦进入某个 Worker,就全程由它完成读取、转发、响应,不会跨进程流转,也不需要加锁同步。
信号驱动生命周期管理
外部操作全部通过向 Master 发送 Unix 信号完成:
- SIGHUP:重载配置。Master 解析新配置,启动新 Worker,再向旧 Worker 发 SIGQUIT,让其处理完存量请求后退出
- SIGUSR1:日志轮转。Master 通知所有 Worker 关闭并重新打开 access/error 日志文件
- SIGTERM / SIGINT:强制停止。Master 向所有 Worker 发 SIGTERM,自身随即退出
- SIGQUIT:优雅停止。Worker 完成当前连接后再退出,Master 最后退出
CPU 亲和与资源隔离保障效率
Worker 进程数通常设为 CPU 核心数,可配合 worker_cpu_affinity 绑定到指定核心,减少上下文切换和缓存失效。各 Worker 拥有独立内存空间与连接池,一个进程崩溃不影响其他进程,故障隔离性强。这种设计既规避了多线程共享内存的锁竞争风险,又充分利用了多核并行能力。











