nginx的进程模型

一、Nginx进程模型

image.png
Nginx启动后,以daemon多进程⽅式在后台运⾏,包括⼀个Master进程和多个Worker进程,Master进程是领导,是⽼⼤,Worker进程是⼲活的⼩弟。
worker和master之间可以通过信号或者共享内存来交互。

master进程

  1. 管理worker进程
    1. 接收外界信号,向各worker发送信号(./nginx -s reload)
    2. 监控worker的工作状态,worker退出后自动启动新的worker进程
    3. 创建了 socket、然后 bind 并 listen

worker进程

  1. 由master进程fork而来。由于每个进程都一样,所以每个 Worker 都有 Master 创建出来的 listen 状态的 socket 句柄。所以每个worker进程都能监听到新连接加入的事件。
  2. worker进程负责具体的网络请求的处理
  3. worker之间的关系是平等的,同等的竞争来自客户端的请求,并且互相独立。
  4. 一个请求只能在一个worker中进行处理,一个worker也不可能处理其他worker的请求
  5. worker进程个数是可配置的,一般与机器cpu核心数量一致。

示意图

二、Nginx reload配置文件过程

nginx -s reload nginx都做了些什么

  1. master进程负责对配置文件进行语法检查。
  2. 尝试按照新配置进行配置(例如配置了新的监听端口)。
  3. 尝试使用新的配置新建worker进程。
  4. 新进程新建成功,给旧的worker进程发送关闭信号。所以reload后,worker进程的pid会发生变化。
  5. 旧的进程收到关闭信号,处理完已收到的请求后就会进行关闭。

三、worker进程处理请求的过程

当nginx监听一个端口时,例如是80端口,那么每个worker进程都有可能处理这个连接。

  1. master监听并绑定端口后,fork出对应的worker进程,所以每个worker进程都能监听到新连接的加入。所有worker进程的监听描述符listenfd在新连接到来时都变得可读。
  2. nginx使用互斥锁,来保证一个请求只有1个worker处理。拿到互斥锁的worker进程,注册listenfd读事件,然后在该事件掉用accept接受连接,然后解析、处理、返回客户端。

四、Nginx多进程模型的好处

  1. 每个worker进程都是独立处理连接数据,处理过程中不需要锁,节省了开销。
  2. worker进程互相独立,一个出现异常其他的worker可以继续服务
  3. 多进程模型为reload热部署提供了良好的支撑
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值