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

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cycle_t 类型

 

ngx_cycle_t

定义在 src/core/ngx_core.h 

typedef struct ngx_cycle_s           ngx_cycle_t;

 


ngx_cycle_s

定义在 src/core/ngx_cycle.h

struct ngx_cycle_s {
    void                  ****conf_ctx;
    ngx_pool_t               *pool;
 
    ngx_log_t                *log;
    ngx_log_t                 new_log;
 
    ngx_uint_t                log_use_stderr;  /* unsigned  log_use_stderr:1; */
 
    ngx_connection_t        **files;
    ngx_connection_t         *free_connections;
    ngx_uint_t                free_connection_n;
 
    ngx_module_t            **modules;
    ngx_uint_t                modules_n;
    ngx_uint_t                modules_used;    /* unsigned  modules_used:1; */
 
    ngx_queue_t               reusable_connections_queue;
    ngx_uint_t                reusable_connections_n;
    time_t                    connections_reuse_time;
 
    ngx_array_t               listening;
    ngx_array_t               paths;
 
    ngx_array_t               config_dump;
    ngx_rbtree_t              config_dump_rbtree;
    ngx_rbtree_node_t         config_dump_sentinel;
 
    ngx_list_t                open_files;
    ngx_list_t                shared_memory;
 
    ngx_uint_t                connection_n;
    ngx_uint_t                files_n;
 
    ngx_connection_t         *connections;
    ngx_event_t              *read_events;
    ngx_event_t              *write_events;
 
    ngx_cycle_t              *old_cycle;
 
    ngx_str_t                 conf_file;
    ngx_str_t                 conf_param;
    ngx_str_t                 conf_prefix;
    ngx_str_t                 prefix;
    ngx_str_t                 error_log;
    ngx_str_t                 lock_file;
    ngx_str_t                 hostname;
};

 


它用于管理 Nginx 的运行时上下文,包含了 Nginx 在运行过程中所需的各种资源和配置信息 

它的主要作用包括:

  1. 管理模块配置 :存储各个模块的配置上下文。
  2. 管理内存池 :提供内存分配和释放的功能。
  3. 管理日志系统 :记录运行时的日志信息。
  4. 管理连接和事件 :处理客户端连接和事件驱动模型。
  5. 管理监听端口和文件 :存储监听套接字、打开的文件等信息。
  6. 支持动态更新 :在重新加载配置时,保存旧的上下文以便平滑切换。

 


成员变量详解

1. 配置相关
  • void ****conf_ctx;

    • 含义 : 指向一个四维指针数组,用于存储各个模块的配置上下文。
    • 作用 : 每个模块可以通过 conf_ctx 访问自己的配置数据。
    • 背景 : Nginx 的模块化设计使得每个模块可以有自己的配置结构,conf_ctx 是这些配置的统一入口。
  • ngx_str_t conf_file;

    • 含义 : 配置文件的路径。
    • 作用 : 指定 Nginx 使用的主配置文件(如 nginx.conf)。
  • ngx_str_t conf_param;

    • 含义 : 命令行传递的额外配置参数。
    • 作用 : 允许通过命令行覆盖部分配置。
  • ngx_str_t conf_prefix;

    • 含义 : 配置文件的前缀路径。
    • 作用 : 用于解析相对路径的配置文件。
  • ngx_str_t prefix;

    • 含义 : Nginx 安装目录的前缀路径。
    • 作用 : 用于定位安装目录下的文件(如日志文件、锁文件等)。

2. 内存管理
  • ngx_pool_t *pool;
    • 含义 : 内存池对象。
    • 作用 : 提供高效的内存分配和释放功能,避免频繁调用系统级别的 mallocfree

3. 日志系统
  • ngx_log_t *log;

    • 含义 : 当前使用的日志对象。
    • 作用 : 用于记录运行时的日志信息。
  • ngx_log_t new_log;

    • 含义 : 新的日志对象。
    • 作用 : 在重新加载配置时,可能会创建新的日志对象。
  • ngx_uint_t log_use_stderr;

    • 含义 : 是否将日志输出到标准错误(stderr)。
    • 作用 : 控制日志的输出方式。

4. 连接与事件管理
  • ngx_connection_t **files;

    • 含义 : 文件描述符到连接对象的映射表。
    • 作用 : 快速查找某个文件描述符对应的连接。
  • ngx_connection_t *free_connections;

    • 含义 : 空闲连接链表。
    • 作用 : 管理未被使用的连接对象,提高连接复用效率。
  • ngx_uint_t free_connection_n;

    • 含义 : 空闲连接的数量。
    • 作用 : 统计当前可用的空闲连接数。
  • ngx_connection_t *connections;

    • 含义 : 所有连接对象的数组。
    • 作用 : 管理所有活动的连接。
  • ngx_event_t *read_events;

    • 含义 : 读事件数组。
    • 作用 : 存储所有读事件。
  • ngx_event_t *write_events;

    • 含义 : 写事件数组。
    • 作用 : 存储所有写事件。

5. 模块管理
  • ngx_module_t **modules;

    • 含义 : 模块数组。
    • 作用 : 存储所有已加载的模块。
  • ngx_uint_t modules_n;

    • 含义 : 模块数量。
    • 作用 : 统计已加载的模块总数。
  • ngx_uint_t modules_used;

    • 含义 : 模块是否已被使用。
    • 作用 : 标记模块的状态。

6. 可复用连接管理
  • ngx_queue_t reusable_connections_queue;

    • 含义 : 可复用连接队列。
    • 作用 : 管理可复用的连接,提高连接复用效率。
  • ngx_uint_t reusable_connections_n;

    • 含义 : 可复用连接的数量。
    • 作用 : 统计当前可复用的连接数。
  • time_t connections_reuse_time;

    • 含义 : 连接复用的时间限制。
    • 作用 : 控制连接复用的时间窗口。

7. 监听与文件管理
  • ngx_array_t listening;

    • 含义 : 监听端口数组。
    • 作用 : 存储所有监听的套接字信息。
  • ngx_array_t paths;

    • 含义 : 路径数组。
    • 作用 : 存储需要监控的路径(如临时文件路径)。
  • ngx_list_t open_files;

    • 含义 : 打开的文件列表。
    • 作用 : 管理所有打开的文件。
  • ngx_list_t shared_memory;

    • 含义 : 共享内存列表。
    • 作用 : 管理共享内存区域。

8. 动态更新支持
  • ngx_cycle_t *old_cycle;
    • 含义 : 旧的 cycle 对象。
    • 作用 : 在重新加载配置时,保存旧的上下文以便平滑切换。

9. 锁与主机名
  • ngx_str_t lock_file;

    • 含义 : 锁文件路径。
    • 作用 : 用于进程间同步。
  • ngx_str_t hostname;

    • 含义 : 主机名。
    • 作用 : 存储当前服务器的主机名。

  


 

 

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

  • 数据库基本概念及基本使用
  • AcWing 801. 二进制中1的个数
  • kamailio常见问题解答
  • 1-16 tortoiseGit分支与Git操作
  • Windows逆向工程入门之栈指令与核心机制深度解析
  • 什么是原型?
  • Yolov5算法原理
  • 15.1 Process(进程)类
  • 基于 energy (lcl v3.0) 跨平台GUI框架实现的 XTA SDK GUI 源码实现
  • 考研操作系统-----外存文件
  • MATLAB图像处理:图像分割方法
  • 使用conda update python将python3.6更新到python3.7版本出现bug:
  • 计算机组成原理第二章
  • 如何将ubuntu下的一个目录,保存目录结构为一个git仓库并上传
  • Python大数据可视化:基于大数据技术的共享单车数据分析与辅助管理系统_flask+hadoop+spider
  • docker部署dify结合deepseek构建知识库
  • three.js+WebGL踩坑经验合集(8.1):用于解决z-fighting叠面问题的polygonOffset远没我们想象中那么简单
  • 基于2025Python电商商品评论数据采集与分析可视化系统
  • IT : 是工作還是嗜好? Delphi 30周年快乐!
  • 【Java】分布式锁Redis和Redisson
  • 首个偏头痛急性治疗药物可缓解前期症状
  • 上海团队在医学顶刊连发两文,率先提出“证据污染”循证概念
  • 人民日报钟声:通过平等对话协商解决分歧的重要一步
  • 国羽用冠军开启奥运周期,林丹:希望洛杉矶奥运取得更好成绩
  • 93岁南开退休教授陈生玺逝世,代表作《明清易代史独见》多次再版
  • 总粉丝破亿!当网络大V遇见硬核科技,互联网时代如何书写上海故事?