Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cycle_modules
声明在 src/core/ngx_module.h
ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle);
实现在 src/core/ngx_module.c
ngx_int_t
ngx_cycle_modules(ngx_cycle_t *cycle)
{/** create a list of modules to be used for this cycle,* copy static modules to it*/cycle->modules = ngx_pcalloc(cycle->pool, (ngx_max_module + 1)* sizeof(ngx_module_t *));if (cycle->modules == NULL) {return NGX_ERROR;}ngx_memcpy(cycle->modules, ngx_modules,ngx_modules_n * sizeof(ngx_module_t *));cycle->modules_n = ngx_modules_n;return NGX_OK;
}
这个函数ngx_cycle_modules
的作用是为当前Nginx服务器周期(cycle)初始化并设置模块列表。具体来说:
-
函数为当前周期分配内存,用于存储模块指针数组
-
将静态定义的模块列表(
ngx_modules
)复制到当前周期的模块列表中 -
设置当前周期的模块数量
ngx_cycle_modules
函数的签名如下:
ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle);
以下是对函数签名的详细解析:
1. 返回值类型 ngx_int_t
类型定义:ngx_int_t 是 Nginx 自定义的整数类型,用于统一跨平台的整数表示。
语义:
NGX_OK(值为 0):表示函数执行成功。
NGX_ERROR(值为 -1):表示函数执行失败(如内存分配失败)。
作用:通过返回状态码,通知调用者函数执行结果。
2. 参数 ngx_cycle_t *cycle
参数类型:ngx_cycle_t 是 Nginx 的核心结构体,表示一个运行周期(如启动、重载配置时的实例)。
详解
注释部分
/** create a list of modules to be used for this cycle,* copy static modules to it*/
作用:说明函数的核心目标。
背景:
Nginx 的模块在编译时静态注册到全局数组 ngx_modules。
每个运行周期(cycle)需要独立的模块列表,以支持配置重载时的多实例隔离。
设计思想:
隔离性:通过复制全局模块到 cycle,避免不同周期(如旧配置与新配置)的模块相互干扰。
分配模块数组内存
cycle->modules = ngx_pcalloc(cycle->pool, (ngx_max_module + 1) * sizeof(ngx_module_t *));
作用:在 cycle 的内存池中分配内存,存储模块指针数组。
关键参数:
cycle->pool:Nginx 内存池,确保高效内存管理(避免频繁 malloc/free)。
ngx_max_module + 1:ngx_max_module 是编译时定义的最大模块数,+1 用于预留终止标记(如 NULL)
检查内存分配
if (cycle->modules == NULL) {return NGX_ERROR;
}
-
作用:验证内存分配是否成功。
-
逻辑:若
ngx_pcalloc
返回NULL
,直接返回错误码NGX_ERROR
复制全局模块到周期模块列表
ngx_memcpy(cycle->modules, ngx_modules, ngx_modules_n * sizeof(ngx_module_t *));
作用:将全局模块数组 ngx_modules 拷贝到 cycle->modules
关键变量:
ngx_modules:全局静态模块数组,编译时生成。
ngx_modules_n:全局模块数量,编译时确定。
仅复制实际存在的模块(ngx_modules_n 个),而非整个预分配空间。
记录模块数量
cycle->modules_n = ngx_modules_n;
-
作用:将全局模块数量
ngx_modules_n
赋值给cycle->modules_n
-
逻辑:
-
cycle->modules_n
后续用于遍历模块(如初始化模块时)
-
返回成功状态
return NGX_OK;
-
作用:通知调用者函数执行成功。
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules-CSDN博客
相关文章:
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cycle_modules
声明在 src/core/ngx_module.h ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle);实现在 src/core/ngx_module.c ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle) {/** create a list of modules to be used for this cycle,* copy static modules to it*/cycle->modul…...
Java多线程与高并发专题——关于CopyOnWrite 容器特点
引入 在 CopyOnWriteArrayList 出现之前,我们已经有了 ArrayList 和 LinkedList 作为 List 的数组和链表的实现,而且也有了线程安全的 Vector 和Collections.synchronizedList() 可以使用。 首先我们来看看Vector是如何实现线程安全的 ,还是…...
Wpf-ReactiveUI-Usercontrol与主界面交互
文章目录 Usercontrol与主界面方法一、使用属性绑定UserControl 部分(MyUserControl.xaml.cs)UserControl 视图模型部分(MyUserControlViewModel.cs)主界面部分(MainWindow.xaml)主界面视图模型部分(MainWindowViewModel.cs)方法二、使用消息传递UserControl 视图模型部…...
MySQL中like模糊查询如何优化?
大家好,我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中,LIKE 模糊查询虽然非常常见,…...
用Ruby的Faraday库来进行网络请求抓取数据
在 Ruby 中,Faraday 是一个非常强大的 HTTP 客户端库,它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据,处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求,抓取数据并处理响应。 1.…...
2025天梯训练1
PTA | L3-1 直捣黄龙 30分 思路:多关键字最短路,同时还要记录最短路径条数。 typedef struct node{int from,d,pass,kl;bool operator<(const node &x)const{if(d!x.d) return d>x.d;if(pass!x.pass) return pass<x.pass;return kl<x.…...
DeepSeek教我写词典爬虫获取单词的音标和拼写
Python在爬虫领域展现出了卓越的功能性,不仅能够高效地抓取目标数据,还能便捷地将数据存储至本地。在众多Python爬虫应用中,词典数据的爬取尤为常见。接下来,我们将以dict.cn为例,详细演示如何编写一个用于爬取词典数据…...
揭开AI-OPS 的神秘面纱 第四讲 AI 模型服务层(自研方向)
AI 模型服务层技术架构与组件选型分析(自研方向) 基于自有开发寻训练方向 AI 模型服务层 是 AI-Ops 架构的 核心智能引擎,负责构建、训练、部署、管理和监控各种 AI 模型,为上层应用服务层提供智能分析和决策能力。 AI 模型服务层需要提供一个灵活、可扩展、高性能的平台…...
[通俗易懂C++]:std::optional
[通俗易懂C]:std::optional 考虑下面这样一个函数: int doIntDivision(int x, int y) {return x / y; }如果调用者传入一个语义上无效的值(例如 y 0 ),此函数无法计算一个返回值(因为除以 0 在数学上是未定义的)。在…...
深入理解与配置 Nginx TCP 日志输出
一、背景介绍 在现代网络架构中,Nginx 作为一款高性能的 Web 服务器和反向代理服务器,广泛应用于各种场景。除了对 HTTP/HTTPS 协议的出色支持,Nginx 从 1.9.0 版本开始引入了对 TCP 和 UDP 协议的代理功能,这使得它在处理数据库…...
使用 vxe-table 导出 excel,支持带数值、货币、图片等带格式导出
使用 vxe-table 导出 excel,支持带数值、货币、图片等带格式导出,通过官方自动的导出插件 plugin-export-xlsx 实现导出功能 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:htt…...
Spring-事务
Spring 事务 事务的基本概念 🔹 什么是事务? 事务是一组数据库操作,它们作为一个整体,要么全部成功,要么全部回滚。 常见的事务场景: 银行转账(扣款和存款必须同时成功) 订单系统…...
开源项目介绍:Native-LLM-for-Android
项目地址:Native-LLM-for-Android 创作活动时间:2025年 支持在 Android 设备上运行大型语言模型 (LLM) ,具体支持的模型包括: DeepSeek-R1-Distill-Qwen: 1.5B Qwen2.5-Instruct: 0.5B, 1.5B Qwen2/2.5VL:…...
vocabulary is from your listening,other speaking and your thought.
不要把单词放在自己的大脑里,放在自己的嘴巴里,自己在那疯狂重复的recite,its futile.只是单点记忆单词,记住也是temporary,而且是单点的记忆,当别人说此词汇,你也听不懂或分辨就是这个单词&…...
前端知识点---路由模式-实例模式和单例模式(ts)
在 ArkTS(Ark UI 框架)中,路由实例模式(Standard Instance Mode)主要用于管理页面跳转。当创建一个新页面时,可以选择标准实例模式(Standard Mode)或单实例模式(Single M…...
Matplotlib库中color 参数颜色有多少种
**当我们绘图超过十几种颜色。我都是 定义颜色列表( ** colors [blue, green, red, cyan, magenta, yellow, greenyellow, orange, purple, brown, pink, gray]1、 颜色名称 Matplotlib常用的颜色名称: red 或 r green 或 g blue 或 b yellow 或 y cy…...
LINUX虚拟机中,不能播放RTSP设备,怎么办
首先,主机能够打开RTSP设备。虚拟机无法打开。 虚拟机网络设置 桥接网卡,选择正确的网卡。 虚拟机IP设置 需要是同一个网段。交换机的设备是192.168.1.192 用ffplay测试...
宝塔的ssl文件验证域名后,会在域名解析列表中留下记录吗?
在使用宝塔面板进行SSL证书验证域名后,通常不会在域名解析列表中留下记录。验证过程中添加的TXT记录仅用于验证域名的所有权,一旦验证完成,就可以安全地删除这些记录,不会影响SSL证书的正常使用。根据搜索结果,DNS验证…...
mitt 依赖库详解
一、概述 mitt 是一个极其轻量级的 JavaScript 事件发射器库,实现了发布-订阅模式。该模式允许对象间松散耦合,一个对象(发布者)可以发布事件,而其他对象(订阅者)可以监听这些事件并作出响应。…...
OSPF网络类型:NBMA与P2MP
一、NBMA网络 NBMA网络的特点 连接方式: 支持多台设备连接到同一个网络段,但网络本身不支持广播或组播。典型例子:帧中继、ATM。 DR/BDR选举: 由于网络不支持广播,OSPF需要手动配置邻居。 仍然会选举DR(…...
VUE叉的工作原理?
Vuex 是 Vue.js 的一个专门用于状态管理的库,其工作原理基于单向数据流和集中式存储,旨在解决跨组件之间状态共享和管理的复杂性。以下是 Vuex 的核心工作原理及其关键组成部分: 核心概念 State(状态) Vuex 使用一个单…...
H.264语法结构分析之frame_cropping_flag
技术背景 开发者对接我们轻量级RTSP服务的时候,利用部分开源的播放器,播放流数据的时候,说分辨率不对,导致看到的图像有问题,用我们的player或常见的通用播放器,又都是好的,这就扯到了今天的主…...
【智能体】本地安装Conda和搭建OpenManus环境
整理不易,请不要令色你的赞和收藏。 1. 前言 没体验到 Manus?不妨使用 MetaGPT 开源的 OpenManus 搭建自己的 Manus。本文将带你安装 Conda 并搭建自己的 Manus。 2. 前提条件 已安装 conda,没安装的话,下文有介绍。 OpenManu…...
【linux网络编程】套接字编程API详细介绍
在C语言中,套接字(Socket)编程主要用于网络通信,尤其是在基于TCP/IP协议的应用程序开发中。常用的套接字编程API主要基于Berkeley Sockets(伯克利套接字)接口,这些函数通常在<sys/socket.h&g…...
杂项知识笔记搜集
1.pygame pygame可以画出来图形界面,pygame Python仓库 PyGame游戏编程_游戏程序设计csdn-CSDN博客 2.V4L2库 V4L2是Linux上的Camera采集器的框架 Video for Linux ,是从Linux2.1版本开始支持的。HDMI视频采集卡采集到的视频通过USB3.0输出࿰…...
模型微调——模型性能提升方法及注意事项(自用)
名词补充 人为为训练数据标注的标签称为黄金标准或真实值,这个过程一定程度上保证训练的准确性,但是其人工标注的成本和时间很高,并且标注的标签受人的主观因素影响。 导致模型性能不佳的因素和解决办法 ①不同类别的数据不平衡:统…...
RabbitMQ之旅(1)
相信自己,终会成功 目录 主流MQ产品 1.kafaka 2.RocketMQ 3.RabbitMQ 在xshell上安装RabbitMQ RabbitMQ七种工作模式 1.简单模式 编辑 2.工作队列模式 3.发布/订阅模式 4.路由模式 5.通配符模式 6.RPC模式 AMQP.BasicProperties 设置消息属性的类 7.发布确认模…...
TCP7680端口是什么服务
WAF上看到有好多tcp7680端口的访问信息 于是上网搜索了一下,确认TCP7680端口是Windows系统更新“传递优化”功能的服务端口,个人理解应该是Windows利用这个TCP7680端口,直接从内网已经具备更新包的主机上共享下载该升级包,无需从微…...
跟着 Lua 5.1 官方参考文档学习 Lua (11)
文章目录 5.4.1 – PatternsCharacter Class:Pattern Item:Pattern:Captures: string.find (s, pattern [, init [, plain]])例子:string.find 的简单使用 string.match (s, pattern [, init])string.gmatch (s, pattern)string.gsub (s, pattern, repl [, n])例子&…...
<script setup>和export default { setup() { ... } }区别
在 Vue 3 组合式 API(Composition API)中,<script setup> 和 export default setup() {} 都用于定义组件的逻辑,但它们有一些重要的区别: 1️⃣ <script setup>(推荐) ✅ 更简洁、…...
leetcode hot100--动态规划【五步总纲】
五步: 1.dp数组以及下标定义 dp[i] 2.递推公式 dp[n]dp[n-1]dp[n-2] 3.dp数组如何初始化 注意:判断边界条件,n0dp[1]就不存在【斐波那契】 4.遍历顺序 for循环顺序 5.打印数组【debug】 第一题:斐波那契数列 首先回顾了…...
RtlLookupAtomInAtomTable函数分析之RtlpAtomMapAtomToHandleEntry函数的作用是验证其正确性
第一部分: NTSTATUS RtlLookupAtomInAtomTable( IN PVOID AtomTableHandle, IN PWSTR AtomName, OUT PRTL_ATOM Atom OPTIONAL ) { NTSTATUS Status; PRTL_ATOM_TABLE p (PRTL_ATOM_TABLE)AtomTableHandle; PRTL_ATOM_TABLE_ENTRY a; …...
【从零开始学习计算机科学】硬件设计与FPGA原理
硬件设计 硬件设计流程 在设计硬件电路之前,首先要把大的框架和架构要搞清楚,这要求我们搞清楚要实现什么功能,然后找找有否能实现同样或相似功能的参考电路板(要懂得尽量利用他人的成果,越是有经验的工程师越会懂得借鉴他人的成果)。如果你找到了的参考设计,最好还是…...
todo: 使用融云imserve做登录(android)
使用融云做登录注册思路 注册界面需要name, email, password考虑到融云注册用户的post格式 POST http://api.rong-api.com/user/getToken.json?userId1690544550qqcom&nameIronman这里的userId可以使用用户的email,但是要截断和 . 符号,即1690544…...
从0开始的操作系统手搓教程23:构建输入子系统——实现键盘驱动1——热身驱动
目录 所以,键盘是如何工作的 说一说我们的8042 输出缓冲区寄存器 状态寄存器 控制寄存器 动手! 注册中断 简单整个键盘驱动 Reference ScanCode Table 我们下一步就是准备进一步完善我们系统的交互性。基于这个,我们想到的第一个可以…...
Azure云生态系统详解:核心服务、混合架构与云原生概念
核心服务:深入掌握Azure SQL Database、Azure Database for PostgreSQL、Azure Database for MySQL的架构、备份恢复、高可用性配置(如Geo-Replication、自动故障转移组、异地冗余备份)。混合架构:熟悉Azure Arc(管理混…...
Unity Dots
文章目录 什么是DotsDOTS的优势ECS(实体组件系统)Job System作业系统Burst编译器最后 什么是Dots DOTS(Data-Oriented Technology Stack)是Unity推出的一种用于开发高性能游戏和应用的数据导向技术栈,包含三大核心组件…...
SAP DOI EXCEL宏的使用
OAOR里上传EXCEL模版 屏幕初始化PBO创建DOI EXCEL对象,并填充EXCEL内容 *&---------------------------------------------------------------------* *& Module INIT_DOI_DISPLAY_9100 OUTPUT *&--------------------------------------------…...
VSTO(C#)Excel开发3:Range对象 处理列宽和行高
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
单链表基本操作的实现与解析(补充)
目录 一、引言 二、代码实现 遍历考虑情况 三、操作解析 查找操作(sltfind函数) 前插操作(sltinsert函数) 后插操作(sltinsertafter函数) 前删操作(slterase函数) 后删操作&…...
电子学会—2024年月6青少年软件编程(图形化)四级等级考试真题——魔法门
魔法门 1.准备工作 (1)保留默认角色小猫和白色背景; (2)添加角色Home Button,复制9个造型,在每个造型上分别加上数字1到9,如下图所示; 2.功能实现 (1)程序开始,依次克隆出五个Home Button,克隆体之间的间距为90; …...
《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急设备智能化升级路径与落地实践
感谢阅读本次内容分享,下面我将解读分析《加快应急机器人发展的指导意见》,喜欢的点赞支持一下呗~(日更真的很辛苦~),欢迎评论区留言讨论,你们的发言我都会看到~ 《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急…...
Git系列之git tag和ReleaseMilestone
以下是关于 Git Tag、Release 和 Milestone 的深度融合内容,并补充了关于 Git Tag 的所有命令、详细解释和指令实例,条理清晰,结合实际使用场景和案例。 1. Git Tag 1.1 定义 • Tag 是 Git 中用于标记特定提交(commit…...
【每日学点HarmonyOS Next知识】Web上传文件、监听上下左右区域连续点击、折叠悬停、字符串相关、播放沙盒视频
1、HarmonyOS APP内h5原生webview input[typefile]无法唤醒手机上传? 文件上传要使用对应的picker https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-file-upload-V5 Web组件支持前端页面选择文件上传功能,应用开发者可以使用on…...
解决电脑问题(3)——显示器问题
当电脑显示器出现问题时,可以根据不同的故障现象采取相应的解决方法,以下是一些常见的情况及解决措施: 屏幕无显示 检查连接:首先检查显示器与电脑主机之间的视频连接线是否插好,确保两端的接口都牢固连接,…...
AArch64架构及其编译器
—1.关于AArch64架构 AArch64是ARMv8-A架构的64位执行状态,支持高性能计算和大内存地址空间。它广泛应用于现代处理器,如苹果的A系列芯片、高通的Snapdragon系列,以及服务器和嵌入式设备。 • 编译器:可以使用GCC、Clang等编译器编…...
免费送源码:Java+springboot+MySQL 房屋租赁系统小程序的设计与实现 计算机毕业设计原创定制
目 录 摘要 1 1 绪论 1 1.1选题意义 1 1.2开发现状 1 1.3springboot框架介绍 1 1.4论文结构与章节安排 1 2 房屋租赁系统小程序系统分析 3 2.1 可行性分析 3 2.1.1 技术可行性分析 3 2.1.2 经济可行性分析 3 2.1.3 法律可行性分析 3 2.2 系统功能分析 3 2.2.1 功…...
前端数据模拟 Mock.js 学习笔记
mock.js介绍 Mock.js是一款前端开发中拦截Ajax请求再生成随机数据响应的工具,可以用来模拟服务器响应 优点是:非常方便简单,无侵入性,基本覆盖常用的接口数据类型支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜…...
【Linux内核系列】:深入解析输出以及输入重定向
🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz ★★★ 本文前置知识: 文件系统以及文件系统调用接口 用c语言简单实现一个shell外壳程序 内容回顾 那么在此前的学习中,我们对于Linux的文件系统已经有了…...
Adam 优化器与动量法:二阶矩与 ODE 的联系
Adam 优化器与动量法:二阶矩与 ODE 的联系 作为深度学习研究者,你一定对 Adam(Adaptive Moment Estimation)优化器非常熟悉。它因自适应学习率和高效率而成为训练神经网络的标配算法。Adam 使用了一阶动量(梯度的指数…...