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

news2025/3/12 12:36:51

 

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;

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

  


 

 

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Spring Boot] Expense API 实现

[Spring Boot] Expense API 实现 项目地址:expense-api 项目简介 最近跟着视频做的一个 spring boot 的项目,包含了比较简单的记账功能的实现(只限 API 部分),具体实现的功能有: 记账(expen…

设置默认构建变体 Build Variant

Android Studio在打开项目时有时会把我设置好的build Variant改为默认的变体,没注意的话可能打完包才发现打错了,浪费时间。因此,有必要通过代码设置一个我想要的默认变体。 代码其实很简单,只要在变体下面加上isDefault true即可…

【大模型】DeepSeek使用与原理解析:从V3到R1

文章目录 一、引言二、使用与测评1.7大R1使用技巧2.官网实测 发展历程三、Deepseek MoE:专家负载均衡 (2024年1月)四、GRPO:群体相对策略优化(DeepSeek-Math,2024年4月)五、三代注意力&#xff…

DAY04 Object、Date类、DateFormat类、Calendar类、Math类、System类

学习目标 能够说出Object类的特点是所有类的祖宗类,任意的一个类都直接或者间接的继承了Object类,都可以使用Object类中的方法Animal extends Object:直接继承Cat extends Animal:间接继承 能够重写Object类的toString方法altinsert,选择toString 能够重写Object类的equals方法…

图像生成GAN和风格迁移

文章目录 摘要abstract1.生成对抗网络 GAN1.1 算法步骤 2.风格迁移2.1 损失函数2.2 论文阅读2.2.1 简介2.2.2 方法2.2.3 实验2.2.4 结论 3.总结 摘要 本周学习了生成对抗网络(GAN)与风格迁移技术在图像生成中的应用。首先介绍了GAN模型中生成器与判别器…

golangAPI调用deepseek

目录 1.deepseek官方API调用文档1.访问格式2.curl组装 2.go代码1. config 配置2.模型相关3.错误处理4.deepseekAPI接口实现5. 调用使用 3.响应实例 1.deepseek官方API调用文档 1.访问格式 现在我们来解析这个curl 2.curl组装 // 这是请求头要加的参数-H "Content-Type:…

【第15章:量子深度学习与未来趋势—15.3 量子深度学习在图像处理、自然语言处理等领域的应用潜力分析】

一、开篇:为什么我们需要关注这场"量子+AI"的世纪联姻? 各位技术爱好者们,今天我们要聊的这个话题,可能是未来十年最值得押注的技术革命——量子深度学习。这不是简单的"1+1=2"的物理叠加,而是一场可能彻底改写AI发展轨迹的范式转移。 想象这样一个…

JAVA安全—Shiro反序列化DNS利用链CC利用链AES动态调试

前言 讲了FastJson反序列化的原理和利用链,今天讲一下Shiro的反序列化利用,这个也是目前比较热门的。 原生态反序列化 我们先来复习一下原生态的反序列化,之前也是讲过的,打开我们写过的serialization_demo。代码也很简单&…

LangChain大模型应用开发:提示词工程应用与实践

介绍 大家好,博主又来给大家分享知识了。今天给大家分享的内容是LangChain提示词工程应用与实践。 在如今火热的大语言模型应用领域里,LangChain可是一个相当强大且实用的工具。而其中的提示词(Prompt),更是我们与语言模型进行有效沟通的关…

2025 N1CTF crypto 复现

近一个月都没有学习了,一些比赛也没有打,很惭愧自己还是处在刚放假时的水平啊,马上开学了,抓紧做一些训练来康复。 CheckIn import os from Crypto.Util.number import * from secret import FLAGp, q getPrime(512), getPrime…

Windows Defender Control--禁用Windows安全中心

Windows Defender Control--禁用Windows安全中心 链接:https://pan.xunlei.com/s/VOJDuy2ZEqswU4sEgf12JthZA1?pwdtre6#

mount 出现 2038 问题

在 linux 上挂载 ext4 文件系统时出现了 2038 年问题,如下: [ 236.388500] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) [ 236.388560] ext4 filesystem being mounted at /root/tmp supports timestamps until 2…

【第12章:深度学习与伦理、隐私—12.4 深度学习与伦理、隐私领域的未来挑战与应对策略】

凌晨三点的自动驾驶测试场,AI系统突然在暴雨中做出惊人决策——它选择撞向隔离带而不是紧急变道,因为算法推演发现隔离带后的应急车道站着五个工程师。这个惊悚的伦理困境,揭开了深度学习伦理危机最尖锐的冰山一角。 一、潘多拉魔盒已开:深度学习伦理的四大原罪 1.1 数据原…

RL--2

强化学习当中最难的两个点是: 1.reward delay; 2.agent的行为会影响到之后看到的东西,所以agent要学会探索世界; 关于强化学习的不同类型,可以分为以下三种: 一种是policy based:可以理解为它是…

SpringMVC新版本踩坑[已解决]

问题: 在使用最新版本springMVC做项目部署时,浏览器反复500,如下图: 异常描述: 类型异常报告 消息Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [int] not specifie…

2025 pwn_A_childs_dream

文章目录 fc/sfc mesen下载和使用推荐 fc/sfc https://www.mesen.ca/docs/ mesen2安装,vscode安装zg 任天堂yyds w d 左右移动 u结束游戏 i崩溃或者卡死了 L暂停 D658地方有个flag 发现DEEE会使用他。且只有这个地方,maybe会输出flag,应…

pandas(11 分类数据和数据可视化)

前面内容:pandas(10 日期和Timedelta) 目录 一、Python Pandas 分类数据 1.1 pd.Categorical() 1.2 describe() 1.3 获取类别的属性 1.4 分类操作 1.5 分类数据的比较 二、Python Pandas 数据可视化 2.1 基础绘图:plot 2.2 条形图 2.3 直方…

Redis 03章——10大数据类型概述

一、which10 (1)一图 (2)提前声明 这里说的数据类型是value的数据类型,key的类型都是字符串 官网:Understand Redis data types | Docs (3)分别是 1.3.1redis字符串&#xff0…

bps是什么意思

本文来自DeepSeek "bps" 是 "bits per second" 的缩写,表示每秒传输的比特数,用于衡量数据传输速率。1 bps 即每秒传输 1 比特。 常见单位 bps:比特每秒 Kbps:千比特每秒(1 Kbps 1,000 bps&am…

撕碎QT面具(1):Tab Widget转到某个Tab页

笔者未系统学过C语法,仅有Java基础,具体写法仿照于大模型以及其它博客。自我感觉,如果会一门对象语言,没必要先刻意学C,因为自己具有对象语言的基础,等需要用什么再学也不迟。毕竟不是专门学C去搞算法。 1…