zoukankan      html  css  js  c++  java
  • [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进程。

  • 相关阅读:
    tomcat中配置jmx监控
    常用sql
    String、StringBuffer、StringBuilder的不同使用场景
    求交集的几种方法
    使用liunx部署的心得
    几种有助于开发的注释方式。
    SpringDataJPA的几个使用记录
    今年要完成的几件事
    研究kisso跨域登录的心得
    SpringBoot使用的心得记录
  • 原文地址:https://www.cnblogs.com/immjc/p/9156359.html
Copyright © 2011-2022 走看看