Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(11)
详解(11)
初始化配置解析上下文
senv = environ;ngx_memzero(&conf, sizeof(ngx_conf_t));/* STUB: init array ? */conf.args = ngx_array_create(pool, 10, sizeof(ngx_str_t));if (conf.args == NULL) {ngx_destroy_pool(pool);return NULL;}conf.temp_pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, log);if (conf.temp_pool == NULL) {ngx_destroy_pool(pool);return NULL;}conf.ctx = cycle->conf_ctx;conf.cycle = cycle;conf.pool = pool;conf.log = log;conf.module_type = NGX_CORE_MODULE;conf.cmd_type = NGX_MAIN_CONF;
1 保存环境变量
senv = environ;
保存当前进程的环境变量指针,用于后续配置解析中恢复环境
2 初始化配置解析结构体 conf
ngx_memzero(&conf, sizeof(ngx_conf_t));
清空 ngx_conf_t
结构体,确保无残留数据。
ngx_conf_t conf;
conf
的类型 ngx_conf_t
3 创建参数数组
conf.args = ngx_array_create(pool, 10, sizeof(ngx_str_t));
为配置指令的参数预分配动态数组,初始容量 10。
4 创建临时内存池
conf.temp_pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, log);
分配临时内存池,用于解析配置时的短期资源管理(如解析过程中的中间数据),避免污染主内存池。
5 配置配置解析上下文
conf.ctx = cycle->conf_ctx;
conf.cycle = cycle;
conf.pool = pool;
conf.log = log;
conf.module_type = NGX_CORE_MODULE;
conf.cmd_type = NGX_MAIN_CONF;
conf.ctx = cycle->conf_ctx;
将配置解析上下文的 ctx
指向新周期的模块配置数组 cycle->conf_ctx
cycle->conf_ctx
是一个数组,每个元素对应一个模块的配置结构(如 ngx_core_conf_t
通过 ctx
将模块配置与解析过程绑定,模块可直接读写自己的配置。
conf.cycle = cycle;
关联配置解析上下文到当前周期(cycle
)
cycle
包含运行时全局资源(如内存池、监听套接字、共享内存)。
上下文传递:确保配置指令处理函数能操作当前周期的资源。
conf.pool = pool;
将配置解析的内存分配绑定到临时内存池 pool
。
Nginx 使用内存池(ngx_pool_t
)管理配置解析的内存,避免碎片化。
解析过程的所有内存分配均通过 pool
进行,便于后续释放。
conf.log = log;
设置配置解析的日志对象为当前周期的日志。
conf.module_type = NGX_CORE_MODULE;
指定当前解析的模块类型为核心模块(NGX_CORE_MODULE
)。
确保解析器仅处理核心模块的指令
conf.cmd_type = NGX_MAIN_CONF;
设置当前解析的指令层级为主配置块(NGX_MAIN_CONF
)。
总结
字段 | 设计意图 | 核心价值 |
---|---|---|
conf.ctx | 统一存储模块配置 | 模块化与解耦。 |
conf.cycle | 全局资源访问 | 支持解析器操作运行时资源(如共享内存)。 |
conf.pool | 内存安全 | 通过内存池管理解析过程的内存,避免泄漏。 |
conf.log | 日志一致性 | 确保解析阶段的日志与运行时配置一致。 |
module_type | 指令分类 | 仅处理核心模块指令,避免干扰其他模块。 |
cmd_type | 层级控制 | 确保指令应用到正确的配置层级 |
相关文章:
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(11)
详解(11) 初始化配置解析上下文 senv environ;ngx_memzero(&conf, sizeof(ngx_conf_t));/* STUB: init array ? */conf.args ngx_array_create(pool, 10, sizeof(ngx_str_t));if (conf.args NULL) {ngx_destroy_pool(pool);return NULL;}conf.te…...
AI与机器学习、深度学习在气候变化预测中的应用
全球气候变化是现代社会面临的最重要的环境挑战之一,影响了气温、降水、海平面、农业、生态系统等多个方面。气候变化的驱动因素主要包括温室气体排放、气溶胶浓度、火灾频发、海冰融化、叶绿素变化、农业变化和生态环境变化等。这些因素在全球范围内交互作用&#…...
湖仓一体概述
湖仓一体之前,数据分析经历了数据库、数据仓库和数据湖分析三个时代。 首先是数据库,它是一个最基础的概念,主要负责联机事务处理,也提供基本的数据分析能力。 随着数据量的增长,出现了数据仓库,它存储的是…...
Go红队开发—语法补充
文章目录 错误控制使用自定义错误类型错误包装errors.Is 和 errors.Aspanic捕获、recover 、defer错误控制练习 接口结构体实现接口基本类型实现接口切片实现接口 接口练习Embed嵌入文件 之前有师傅问这个系列好像跟红队没啥关系,前几期确实没啥关系,因为…...
【VSCode】VSCode下载安装与配置极简描述
VSCode 参考网址:[Visual Studio Code Guide | GZTime’s Blog]. 下载安装 下载地址:Download Visual Studio Code - Mac, Linux, Windows. 注:推荐不更改安装位置,并且在附加任务中“其他”中的四项全部勾选,即将用…...
揭开人工智能中 Tokens 的神秘面纱
揭开人工智能中 Tokens 的神秘面纱 在人工智能,尤其是自然语言处理(NLP)领域,"tokens" 是一个频繁出现且至关重要的概念。对于理解语言模型如何处理和理解人类语言,tokens 起着基础性的作用。那么ÿ…...
Node.js安装与学习的简单记录
1. 下载与安装 参考: 2024最新版Node.js下载安装及环境配置教程【保姆级】 Node.js中文网 选择长期维护版: 18.19.0,Windows 安装包 (.msi) 64位。 安装选项都默认,安装路径可以改一下。 查看node版本:node -v v18.19.0 查看npm版…...
Spring也能接入Deepseek?
引言 最近DeepSeek可谓风光无限,AI可谓是目前互联网最火热的几个名词,我也一直在关注他的发展,从以前的人工智障,到chatGPT的高不可攀(价格太贵),再到DeepSeek的横空出世,才看到了A…...
STM32 物联网智能家居 (七) 设备子系统--风扇控制
STM32 物联网智能家居 (七) 设备子系统–风扇控制 一、概述 下面我们来讲解设备子系统中的风扇控制,这是我们设备子系统中的最后一章,相信前面大家一家掌握了这种架构分层的编程思想,后续会很容易将程序进行扩展和开发。 上一节我们介绍了OLED屏幕的编程思想,有很多小伙…...
MySQL—Keepalived+MySQL双主复制实现MySQL高可用
Keepalived原理: Keepalived 的原理主要基于虚拟路由冗余协议(VRRP,Virtual Router Redundancy Protocol)、健康检查机制和负载均衡机制,以下为你详细介绍: VRRP 协议实现高可用:VRRP 是 Keep…...
CSS 使用white-space属性换行
一、white-space属性的常见值 * 原本格式: 1、white-space:normal 默认值,空格和换行符会被忽略过滤掉;宽度不够时文本会自动换行 * 宽度足够时,normal 处理后的格式 * 宽度不够时, normal 处理后的格式 2、white-spa…...
【数据结构第十六节】实现链式结构二叉树(详细递归图解—呕心沥血版!)
必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-CSDN博客 这节课挺抽象(苦笑),没事,我会帮你!干就完了! (目录在路上) 正文开始—— 引言 用链表…...
mysqldump 参数详解
mysqldump 是一个用于备份 MySQL 数据库的工具。它可以生成一组 SQL 语句,这些语句可以用来重现原始数据库对象定义和表数据。以下是一些常用的 mysqldump 参数及其详细解释: 常用参数 基本参数 --host=host_name, -h host_name: 指定 MySQL 数据库主机地址,默认为 localh…...
Vue-Flow绘制流程图(Vue3+ElementPlus+TS)简单案例
本文是vue3Elementplusts框架编写的简单可拖拽绘制案例。 1.效果图: 2.Index.vue主代码: <script lang"ts" setup> import { ref, markRaw } from "vue"; import {VueFlow,useVueFlow,MarkerType,type Node,type Edge } fro…...
【11】RUST使用cargo组织crate
文章目录 使用cargo组织crate重导出编译文档生成测试 cargo组织工作空间 TODOcrate.io账号 TODO暂时不看发布crate 使用cargo组织crate 重导出 在模块顶部使用pub use self::重导出,方便使用模块时候直接使用use mod_X::xxx。从而隐藏crate内部模块的结构。方便向…...
开放标准(RFC 7519):JSON Web Token (JWT)
开放标准:JSON Web Token 前言基本使用整合Shiro登录自定义JWT认证过滤器配置Config自定义凭证匹配规则接口验证权限控制禁用session缓存的使用登录退出单用户登录Token刷新双Token方案单Token方案 前言 JSON Web Token (JWT) 是一种开放标准…...
Linux上用C++和GCC开发程序实现不同MySQL实例下单个Schema之间的稳定高效的数据迁移
设计一个在Linux上运行的GCC C程序,同时连接两个不同的MySQL实例,两个实例中分别有两个Schema的表结构完全相同,复制一个实例中一个Schema里的所有表的数据到另一个实例中一个Schema里,使用以下快速高效的方法,加入异常…...
【Windows】Windows常用命令
目录 文件和目录相关命令系统信息查看命令网络相关命令进程管理命令磁盘管理命令用户和权限管理命令计划任务和脚本命令其他常用命令1. 文件和目录相关命令 命令作用示例cd切换目录cd C:\Usersdir列出目录内容dirmkdir创建新目录mkdir NewFolderrmdir删除空目录rmdir OldFolder…...
趣讲TCP三次握手
一、TCP三次握手简介 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP连接中,只有两方进行通信,它使用校验和、确认和重传机制来保证数据的可靠传输。…...
vue3中的标签属性中的Ref
用在普通 DOM 标签上,获取的是 DOM 节点: 当你在一个普通的 HTML 标签(例如 <div>、<input> 等)上使用 ref 属性时,ref 会返回该 DOM 元素的直接引用。这使得你可以在 JavaScript 代码中方便地访问和操作…...
vue3.2 + vxe-table4.x 实现多层级结构的 合并、 展开、收起 功能
<template><div style"padding: 20px"><vxe-table border :data"list" :height"800" :span-method"rowspanMethod"><vxe-column title"一级类目" field"category1"><template #defaul…...
DeepSeek R1 + 飞书机器人实现AI智能助手
效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1,项目为sanic和redis实现,利用httpx异步处理流式响应,同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…...
Java虚拟机监控工具
在Java应用高频出现的OOM、卡顿、线程阻塞等问题背后,往往隐藏着复杂的JVM运行机制异常。本文将通过真实案例场景,演示6款主流工具的组合使用技巧,助你快速定位90%以上的线上故障。 一、基础监控三板斧 1. jstat:GC性能透视仪 …...
利用python和gpt写一个conda环境可视化管理工具
最近在学习python,由于不同的版本之间的差距较大,如果是用环境变量来配置python的话,会需要来回改,于是请教得知可以用conda来管理,但是conda在管理的时候老是要输入命令,感觉也很烦,于是让gpt帮…...
软件工程----统一过程模型RUP
统一过程RUP是一种以用例驱动、以体系结构为核心、迭代和增量的软件开发过程,由UML方法和工具支持,广泛应用于各类面向对象项目。 RUP本身支持可裁剪性,可应付给类领域软件和不同的项目规模 RUP蕴含了大量优秀的实践方法,如&…...
Spring的MutipartFile 会直接将流转成文件存放在临时目录嘛?
Spring 的 MultipartFile 默认会将上传的文件存储到临时目录。具体行为取决于底层的 MultipartResolver 实现。常见的实现包括: 1. StandardServletMultipartResolver(默认实现) 如果使用的是 StandardServletMultipartResolver(…...
基于大数据的空气质量数据可视化分析系统
【大数据】基于大数据的空气质量数据可视化分析系统(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本系统的实践价值在于将大数据技术与空气质量监测相结合,为公众、研究机构和政府…...
一文了解:部署 Deepseek 各版本的硬件要求
很多朋友在咨询关于 DeepSeek 模型部署所需硬件资源的需求,最近自己实践了一部分,部分信息是通过各渠道收集整理,so 仅供参考。 言归正转,大家都知道,DeepSeek 模型的性能在很大程度上取决于它运行的硬件。我们先看一下…...
国内访问Github的四种方法(2025版)
声明:以下内容,仅供学习使用,不得他用。如有他用,与本文作者无关。 国内访问GitHub及下载文件的解决方案整理如下,结合最新技术方案和实测有效方法: 一、网络层解决方案 Hosts文件修改法 通过DNS查询工具…...
企业级AI办公落地实践:基于钉钉/飞书的标准产品解决方案
一、平台化AI的崛起:开箱即用的智能革命 2024年企业AI应用调研数据显示: 73%的中型企业选择平台标准产品而非自研头部SaaS平台AI功能渗透率达89%典型ROI周期从18个月缩短至3-6个月 核心优势对比: 维度自研方案平台标准产品部署周期6-12个…...
金融行业专题|某基金公司基于超融合信创平台支持人大金仓数据库的性能评测
随着“自主可控”在 IT 基础设施领域不断深化,数据库的国产化替代也被很多金融机构提上日程。为了保证性能,大部分国产数据库都基于信创架构的裸金属服务器部署。在国产虚拟化/超融合平台上,国产数据库性能表现如何?尤其是搭配信创…...
Python异常处理面试题及参考答案
目录 什么是 Python 中的异常?程序为什么需要异常处理机制? 解释 BaseException 和 Exception 的区别 Python 的异常处理与传统的错误代码返回机制相比有哪些优势? 列出至少 5 个 Python 内置异常类型并说明触发场景 语法错误 (SyntaxError) 与运行时异常 (Runtime Erro…...
Java 实现快速排序算法:一条快速通道,分而治之
大家好,今天我们来聊聊快速排序(QuickSort)算法,这个经典的排序算法被广泛应用于各种需要高效排序的场景。作为一种分治法(Divide and Conquer)算法,快速排序的效率在平均情况下非常高ÿ…...
【JavaSE-1】初识Java
1、Java 是什么? Java 是一种优秀的程序设计语言,人类和计算机之间的交流可以借助 Java 这种语言来进行交流,就像人与人之间可以用中文、英语,日语等进行交流一样。 Java 和 JavaScript 两者有关系吗? 一点都没有关系!!! 前端内容:HTML CSS JS,称为网页三剑客 2、JDK 下…...
JavaScript将:;隔开的字符串转换为json格式。使用正则表达式匹配键值对,并构建对象。多用于解析cssText为style Object对象
// 使用正则表达式匹配键值对,并构建对象 let string2Json(s)>{const r {};s.replace(/;/g, ;).replace(/\;/g, \n).replace(/:/g, :).replace(/\n/g, \n)//合并多个换行符.split(\n).forEach(item > {const [k, v] item.split(:);(k…...
lvgl运行机制分析
lv_timer_handler() 是 LVGL 的“心脏”:这个函数会依次做以下事情: 处理定时器(如动画、延迟回调)。 读取输入设备(如触摸屏、按键的状态)。 刷新脏区域(仅重绘屏幕上发生变化的区域…...
紧跟潮流,将 DeepSeek 集成到 VSCode
Visual Studio Code(简称 VSCode)是一款由微软开发的免费开源代码编辑器,自 2015 年发布以来,凭借其轻便、强大、且拥有丰富扩展生态的特点,迅速成为了全球开发者的首选工具。VSCode 支持多平台操作系统,包…...
Apache Tomcat RCE 稳定复现 保姆级!(CVE-2024-50379)附视频+POC
原文链接 Apache Tomcat 最新RCE 稳定复现分析 保姆级!!!附复现视频POC 前言 最近爆出 Apache Tomcat条件竞争导致的RCE,影响范围当然是巨大的,公司也及时收到了相关情报,于是老大让我复现,以…...
【文献阅读】A Survey on Model Compression for Large Language Models
大语言模型模型压缩综述 摘要 大语言模型(LLMs)已成功变革了自然语言处理任务。然而,其庞大的规模和高昂的计算需求给实际应用带来了挑战,尤其是在资源受限的环境中。模型压缩已成为应对这些挑战的关键研究领域。本文对大语言模…...
利用shardingsphere-proxy对mysql分片
本文介绍利用shardingsphere-proxy分库分表的配置过程。shardingsphere-proxy是一个中间件,启动后会模拟成一个实际的mysql服务,我们可以通过可视化工具或jdbc操作,实际执行的sql会通过shardingsphere-proxy转换,进而在具体的mysq…...
AI智能体与大语言模型:重塑SaaS系统的未来航向
在数字化转型的浪潮中,软件即服务(SaaS)系统一直是企业提升效率、优化业务流程的重要工具。随着AI智能体和大语言模型(LLMs)的迅速发展,SaaS系统正迎来前所未有的变革契机。本文将从AI智能体和大语言模型对…...
mapbox基础,使用geojson加载heatmap热力图层
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️heatmap热力图层样式二、🍀使用geojs…...
python环境打包2 pytorch和cuda的安装逻辑
基本逻辑 理一理安装pytorch的一列逻辑,以及他的依赖。(看完这小节再实践) 配置pytorch,安装步骤为:显卡驱动-->python-->cuda--->pytorch。 pytorch是依赖conda的,conda是依赖python的。 &am…...
hot100-矩阵
240.搜索二维矩阵② 编写一个高效的算法来搜索 mxn 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 思路: 输入矩阵: 从标准输入读取矩阵的行数 n 和列数 m。 按…...
扩散模型基本概念
1. 核心思想 从最原始的DDPM来讲,扩散模型是用变分估计训练的马尔可夫链,相当于VAE+流模型。与标准化流相比,扩散模型的正向过程为预先定义的加噪过程,负责将图像 x ∼ p ( x ) x\sim{p(x)} x∼...
【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,
欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创…...
网络协议 HTTP、HTTPS、HTTP/1.1、HTTP/2 对比分析
1. 基本定义 HTTP(HyperText Transfer Protocol) 应用层协议,用于客户端与服务器之间的数据传输(默认端口 80)。 HTTP/1.0:早期版本,每个请求需单独建立 TCP 连接,效率低。HTTP/1.1&…...
Mysql COUNT() 函数详解
简介 COUNT()函数定义 COUNT()函数是SQL中常用的 聚合函数 ,用于统计满足特定条件的记录数。它可以灵活地应用于各种查询场景,帮助用户快速获取所需的数据统计信息。该函数不仅能够计算所有行的数量,还能针对特定列进行计数,并支…...
Redis缓存一致性难题:如何让数据库和缓存不“打架”?
标题:Redis缓存一致性难题:如何让数据库和缓存不“打架”?(附程序员脱发指南) 导言:当数据库和缓存成了“异地恋” 想象一下:你刚在美团下单了一份麻辣小龙虾,付款后刷新页面&#…...
WIn32 笔记:本专栏课件
专栏导航 上一篇:在VS2019里面,调整代码字体大小 回到目录 下一篇:计算机基础:二进制基础01,比特与字节 本节前言 在之前的讲解里面,我讲解了 Visual Studio 软件的一些个基础操作步骤。从本节开始&am…...