Nginx源码剖析--ngx_cycle_t的初始化

本文深入探讨了Nginx中ngx_cycle_t结构体的初始化,重点关注ngx_init_cycle函数和old_cycle的角色。old_cycle在main函数中初始化,涉及log、pool、conf_file等设置。ngx_init_cycle创建新的cycle结构,初始化各项参数,包括paths、open_files、shared_memory等,并加载配置文件。此外,文章还总结了ngx_cycle_t初始化的重要步骤和后续的资源管理。
前言

前一篇介绍了ngx_cycle_t中各个成员的具体含义,虽然许多成员具体作用和实现方式我们没有深究,但也有了一个初步的了解。这篇文章将介绍ngx_cycle_t的初始化过程,主要是在ngx_init_cycle函数中完成的,之所以说主要,因为ngx_cycle_t的初始化还会依赖于一个old_cycle,这个old_cycle的初始化是在main中完成的。ngx_init_cycle的函数原型如下

ngx_cycle_t *
ngx_init_cycle(ngx_cycle_t *old_cycle)

old_cycle将作为参数被传进去,因此实际的ngx_cycle的部分成员会参考old_cycle的相应成员做初始化。因此我们先介绍一下old_cycle的初始化,然后介绍ngx_init_cycle函数的实现。


old_cycle初始化

old_cycle的初始化在main函数中进行。它的初始化主要分为两方面,一是根据启动nginx时的命令行参数做初始化,二是根据继承而来的参数做初始化。这里之所以会有继承,是因为nginx支持平滑升级,升级过程由master进程完成,简单来说就是master启动一个新的进程执行升级后的服务器程序,因此所谓继承就是根据未升级时的环境,参数设置新进程的环境,参数等。

下面具体看一下代码,main函数中的init_cycle就是ngx_init_cycle中的old_cycle。

1. 初始化log, pool
    ngx_memzero(&init_cycle, sizeof(ngx_cycle_t));
    init_cycle.log = log;
    ngx_cycle = &init_cycle;

    init_cycle.pool = ngx_create_pool(1024, log);
    if (init_cycle.pool == NULL) {
        return 1;
    }

这些没什么好说的。需要注意的是,ngx_cycle是一个全局变量。

   if (ngx_save_argv(&init_cycle, argc, argv) != NGX_OK) {
        return 1;
    }

这个函数其实没有初始化init_cycle,它只是将命令行参数保存到一些全局变量中。这里之所以要列出这个函数主要是为了了解init_cycle->log的作用。它是做日志的。

2. 初始化conf_file,conf_param,conf_prefix,prefix
if (ngx_process_options(&init_cycle) != NGX_OK) {
        return 1;
    }
3. 初始化cycle->listening
    if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) {
        return 1;
    }

这里就是前面说的继承(平滑升级)起作用的地方。这个函数的作用就是根据未升级时nginx的listening结构初始化init_cycle.

至此,old_cycle(init_cycle)就初始化完毕了。下面将进入ngx_init_cycle函数中

cycle = ngx_init_cycle(&init_cycle);

这个返回的cycle才是正在nginx运行所依赖的ngx_cycle_t。


ngx_init_cycle函数的实现
1. 创建cycle结构体
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值