当前位置: 首页 > news >正文

ngx_set_worker_processes

定义在 src\core\nginx.c 

static char *
ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
    ngx_str_t        *value;
    ngx_core_conf_t  *ccf;

    ccf = (ngx_core_conf_t *) conf;

    if (ccf->worker_processes != NGX_CONF_UNSET) {
        return "is duplicate";
    }

    value = cf->args->elts;

    if (ngx_strcmp(value[1].data, "auto") == 0) {
        ccf->worker_processes = ngx_ncpu;
        return NGX_CONF_OK;
    }

    ccf->worker_processes = ngx_atoi(value[1].data, value[1].len);

    if (ccf->worker_processes == NGX_ERROR) {
        return "invalid value";
    }

    return NGX_CONF_OK;
}
ngx_set_worker_processes 是 Nginx 中用于处理配置指令 worker_processes 的核心函数
解析用户在 Nginx 配置文件中设置的 worker_processes 参数值

worker_processes 是 Nginx 的核心配置指令之一,用于定义 工作进程(Worker Processes)的数量
Nginx 采用多进程模型,由一个 Master 进程 管理多个 Worker 进程 。
每个 Worker 进程独立处理客户端请求,worker_processes 决定了并发处理请求的并行度。
值越大,理论上可同时处理的请求数越多(受限于 CPU、内存等资源)


worker_processes 函数签名

static char *ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);

返回值类型:char *

返回配置解析结果

成功时 返回 NGX_CONF_OK      表示配置有效

失败时  返回具体的错误信息字符串


参数 1:ngx_conf_t *cf
存储当前解析的配置文件路径、参数列表、内存池等信息
通过 cf->args 可获取当前指令的参数



参数 2:ngx_command_t *cmd

描述当前指令的元信息,如指令名称、参数格式、处理函数等。
通过 cmd->name 可获取指令名称(如 worker_processes)。
 



参数 3:void *conf
void* 是通用指针,实际指向模块的配置结构体。

传递模块的配置结构体指针(如 ngx_core_conf_t),用于存储解析后的配置值。
在函数内部需强制转换为具体类型(如 (ngx_core_conf_t *) conf)
 



函数核心逻辑
通过上述参数,函数完成以下关键操作:
1. 防重复配置:  
   检查 ccf->worker_processes是否已设置(值不为 NGX_CONF_UNSET),若重复则返回 is duplicate
2. 参数解析:  
   从 cf->args 中获取参数值(如 auto 或 4),并验证合法性。
3. 自动模式处理:  
   若参数为 auto,则将 worker_processes 设置为 CPU 核心数(ngx_ncpu)。
4. 手动模式处理:  
   若参数为数字,通过 ngx_atoi 转换为整数,失败时返回 invalid value
5. 更新配置结构体:  
   将解析后的值赋给 ccf->worker_processes,供后续 Nginx 启动流程使用。


ccf = (ngx_core_conf_t *) conf;

类型转换,指向模块的配置结构体,转型为具体的 结构体类型


ngx_core_conf_t-CSDN博客


    if (ccf->worker_processes != NGX_CONF_UNSET) {
        return "is duplicate";
    }

NGX_CONF_UNSET 是初始值,代表尚未设置

ccf->worker_processes != NGX_CONF_UNSET 表示 ccf->worker_processes 已经被设置过了


此时

条件不成立


value = cf->args->elts;
获取 指令参数

    if (ngx_strcmp(value[1].data, "auto") == 0) {
        ccf->worker_processes = ngx_ncpu;
        return NGX_CONF_OK;
    }
value[0]是指令本身
value[1].data 是指令的参数
if 参数是 auto 的情况下
ccf->worker_processes 设置为 ngx_ncpu 

此时 
value[1].data=1
这个条件不成立

    ccf->worker_processes = ngx_atoi(value[1].data, value[1].len);

    if (ccf->worker_processes == NGX_ERROR) {
        return "invalid value";
    }

转换为整数 设置给worker_processes


Ubuntu 下 nginx-1.24.0 源码分析 - ngx_atoi 函数-CSDN博客



return NGX_CONF_OK;

返回 NGX_CONF_OK ,表示指令配置成功

相关文章:

  • 考研数据结构之串的模式匹配算法——KMP算法详解(包含真题及解析)
  • 回顾CSA,CSA复习
  • Linux的网络配置的资料
  • python对mysql数据库的操作
  • 深度学习中多机训练概念下的DP与DDP
  • C++ 编程指南35 - 为保持ABI稳定,应避免模板接口
  • SQL查询语句的执行顺序
  • C++(初阶)(十一)——list
  • 数据结构实验6.1:矩阵的螺旋方阵输出
  • 在ArcGIS Pro中将栅格NoData值修改为特定值
  • QEMU源码全解析 —— 块设备虚拟化(19)
  • 【项目管理】第12章 项目质量管理-- 知识点整理
  • JavaScript 输入输出语句
  • Docker 部署 Kafka 完整指南
  • 系统编程3(共享内存/信号量)
  • 【数据结构与算法】——堆(补充)
  • 人的需求更多是动物本能—观《枪王》
  • 计算视觉与数学结构及AI拓展
  • 【家政平台开发(41)】家政平台性能蜕变:性能测试与优化全解析
  • Spring Boot 中应用的设计模式
  • 马上评|纠偏“左行右立”,并排站不必有道德压力
  • 观察|脱欧5年后英欧再办峰会,多项突破性协议意味着什么?
  • 安徽凤阳县明中都鼓楼楼宇顶部瓦片部分脱落,无人员伤亡
  • 台陆委会将欧阳娜娜等20多名艺人列入重要查核对象,国台办回应
  • 夜驾遇东北虎隔窗对视?延吉林业局:村里有牛被咬死,保险公司会理赔
  • 沃尔玛上财季净利下滑12%:关税带来成本压力,新财季价格涨幅将高于去年