文章目录
- 一、Nginx进程模型
-
- 二、Nginx reload配置文件过程
- 三、worker进程处理请求的过程
- 四、Nginx多进程模型的好处
一、Nginx进程模型
Nginx启动后,以daemon多进程⽅式在后台运⾏,包括⼀个Master进程和多个Worker进程,Master进程是领导,是⽼⼤,Worker进程是⼲活的⼩弟。
worker和master之间可以通过信号或者共享内存来交互。
master进程
- 管理worker进程
- 接收外界信号,向各worker发送信号(
./nginx -s reload
) - 监控worker的工作状态,worker退出后自动启动新的worker进程
- 创建了 socket、然后 bind 并 listen
worker进程
- 由master进程fork而来。由于每个进程都一样,所以每个 Worker 都有 Master 创建出来的 listen 状态的 socket 句柄。所以每个worker进程都能监听到新连接加入的事件。
- worker进程负责具体的网络请求的处理
- worker之间的关系是平等的,同等的竞争来自客户端的请求,并且互相独立。
- 一个请求只能在一个worker中进行处理,一个worker也不可能处理其他worker的请求
- worker进程个数是可配置的,一般与机器cpu核心数量一致。
示意图
二、Nginx reload配置文件过程
nginx -s reload
nginx都做了些什么
- master进程负责对配置文件进行语法检查。
- 尝试按照新配置进行配置(例如配置了新的监听端口)。
- 尝试使用新的配置新建worker进程。
- 新进程新建成功,给旧的worker进程发送关闭信号。所以reload后,worker进程的pid会发生变化。
- 旧的进程收到关闭信号,处理完已收到的请求后就会进行关闭。
三、worker进程处理请求的过程
当nginx监听一个端口时,例如是80端口,那么每个worker进程都有可能处理这个连接。
- master监听并绑定端口后,fork出对应的worker进程,所以每个worker进程都能监听到新连接的加入。所有worker进程的监听描述符listenfd在新连接到来时都变得可读。
- nginx使用互斥锁,来保证一个请求只有1个worker处理。拿到互斥锁的worker进程,注册listenfd读事件,然后在该事件掉用accept接受连接,然后解析、处理、返回客户端。
四、Nginx多进程模型的好处
- 每个worker进程都是独立处理连接数据,处理过程中不需要锁,节省了开销。
- worker进程互相独立,一个出现异常其他的worker可以继续服务
- 多进程模型为reload热部署提供了良好的支撑
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)