首页 > 代码库 > Nginx

Nginx

1、Nginx启动后,会有一个master进程和多个worker进程,master进程主要用来管理worker进程。worker用来处理基本的网络事件。master主要管理哪些事呢?a、接收来自外界的信号;b、向各worker进程发送信号;c、监控worker进程状态;d、自动重启退出的worker进程。

2.当我们提供80端口的http服务时,一个连接请求过来,每个进程都有可能处理这个连接,怎么做到的呢?首先,每个worker进程都是从master进程fork过来,在master进程里面,先建立好需要listen的socket(listenfd)之后,然后再fork出多个worker进程。所有worker进程的listenfd会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有worker进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。我们可以看到,一个请求,完全由worker进程来处理,而且只在一个worker进程中处理。

Nginx