[Nginx] 进程模型

Nginx进程模型

Nginx是以多进程的方式来工作的,Nginx在启动之后,会有一个master进程和与多个worker进程(worker进程数与CPU核心数相同,以防止多进程之间抢占资源)。

master进程

master进程主要用于管理调度worker进程。

master的主要工作如下: 接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态。当worker进程异常退出后,会自动重启新的worker进程。

worker进程

worker进程主要是处理基本的网络事件。

多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相独立,一个请求,只可能在一个worker进程中处理,一个worker进程不可能处理其他进程的请求。

总述

1. 管理员发送信号给master进程。

2. master进程将信号分发给worker进程来控制进程处理。

3. 每个worker进程来处理不同的客户端请求。

Nginx热加载:master进程收到信号后,会先重新加载配置信息,然后启动新的worker进程并处理请求,并向所有老的worker进程发送信号。老的worker不再接收新的请求,并在所有出处理完的请求完成后,worker进程退出。

worker进程处理请求

1. 每个worker都是从master进程fork过来,在master进程里面,先建立好需要listen的socket之后,再fork多个worker进程。所有worker进程的listenfd会在新的连接到来时变得可读。

2. 为了保证所有worker进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个worker进程注册listenfd读事件,在读事件中调用accept接收连接。当一个worker进程accept这个连接后,就开始读取请求,解析请求,处理请求,产生数据后,再返回客户端,最后断开连接。形成一个完整的请求过程。

进程模型的优点

1. 对于每个worker进程是独立的,不需要加锁操作,节省开销。

2. 独立进程之间互不影响,一个进程退出后,其他进程还在工作,服务不会中断,master进程会很快启动新的worker进程。

猜你喜欢

转载自www.cnblogs.com/immjc/p/9156359.html
今日推荐