• [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进程。

  • 相关阅读:
    编译原理基础知识---文法和语言(一)
    编译原理简单知识总结(一)---编译程序和解释程序
    python网络编程
    博客声明
    v4l2编程
    Linux中的虚拟文件系统
    linux 内核文件中Makefile、kconfig、.config的关系(SDK结构)
    shell编程---find命令
    springcloud、springboot 版本号解析
    List<Map<String, Object>> 与 json 互转
  • 原文地址:https://www.cnblogs.com/immjc/p/9156359.html
Copyright © 2020-2023  润新知