皮皮网

【小凯kx驱动源码】【pdf源码解读】【抽屉菜单源码】epollselect源码分析

2024-12-29 01:56:07 来源:瀑布线源码

1.nginx源码分析--master和worker进程模型

epollselect源码分析

nginx源码分析--master和worker进程模型

       一、码分Nginx整体架构

       正常执行中的码分nginx会有多个进程,其中最基本的码分是master process(主进程)和worker process(工作进程),还可能包括cache相关进程。码分小凯kx驱动源码

       二、码分核心进程模型

       启动nginx的码分主进程将充当监控进程,主进程通过fork()产生的码分子进程则充当工作进程。

       Nginx也支持单进程模型,码分此时主进程即是码分工作进程,不包含监控进程。码分

       核心进程模型框图如下:

       master进程

       监控进程作为整个进程组与用户的码分pdf源码解读交互接口,负责监护进程,码分不处理网络事件,码分不负责业务执行,码分仅通过管理worker进程实现重启服务、码分平滑升级、抽屉菜单源码更换日志文件、配置文件实时生效等功能。

       master进程通过sigsuspend()函数调用大部分时间处于挂起状态,直到接收到信号。

       master进程通过检查7个标志位来决定ngx_master_process_cycle方法的kk购源码运行:

       sig_atomic_t ngx_reap;

       sig_atomic_t ngx_terminate;

       sig_atomic_t ngx_quit;

       sig_atomic_t ngx_reconfigure;

       sig_atomic_t ngx_reopen;

       sig_atomic_t ngx_change_binary;

       sig_atomic_t ngx_noaccept;

       进程中接收到的信号对Nginx框架的意义:

       还有一个标志位:ngx_restart,仅在master工作流程中作为标志位使用,与信号无关。

       核心代码(ngx_process_cycle.c):

       ngx_start_worker_processes函数:

       worker进程

       worker进程主要负责具体任务逻辑,主要关注与客户端或后端真实服务器之间的数据可读/可写等I/O交互事件,因此工作进程的idea依赖源码阻塞点在select()、epoll_wait()等I/O多路复用函数调用处,等待数据可读/写事件。也可能被新收到的进程信号中断。

       master进程如何通知worker进程进行某些工作?采用的是信号。

       当收到信号时,信号处理函数ngx_signal_handler()会执行。

       对于worker进程的工作方法ngx_worker_process_cycle,它主要关注4个全局标志位:

       sig_atomic_t ngx_terminate;//强制关闭进程

       sig_atomic_t ngx_quit;//优雅地关闭进程(有唯一一段代码会设置它,就是接受到QUIT信号。ngx_quit只有在首次设置为1时,才会将ngx_exiting置为1)

       ngx_uint_t ngx_exiting;//退出进程标志位

       sig_atomic_t ngx_reopen;//重新打开所有文件

       其中ngx_terminate、ngx_quit、ngx_reopen都将由ngx_signal_handler根据接收到的信号来设置。ngx_exiting标志位仅由ngx_worker_cycle方法在退出时作为标志位使用。

       核心代码(ngx_process_cycle.c):