自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(912)
  • 问答 (3)
  • 收藏
  • 关注

原创 ngx_list_init

void *elts;// 指向实际元素数组的指针// 当前已使用的元素个数// 指向下一个 part// 指向最后一个 part// 第一个 part(内嵌,非指针)// 每个元素的大小(字节)// 每个 part 可容纳的元素个数// 所属的内存池所以就是初始化这样一个结构:分配第一个 part 的元素数组,并设置好各个字段。是 Nginx 列表结构的初始化函数为列表的第一个数据块分配内存(n * size字节);初始化列表头结构中的各个字段;

2025-12-23 15:59:14 289

原创 ngx_str_rbtree_insert_value

函数作用该函数实现了基于字符串的红黑树插入比较逻辑整数 key(通常为哈希值)→ 快速过滤;字符串长度→ 处理哈希冲突;字符串内容(字典序)→ 精确比较。它只负责定位插入位置并建立父子关系,不负责红黑树的再平衡。分离“比较逻辑”与“平衡逻辑”,使红黑树可复用于不同键类型。

2025-12-22 21:23:25 583

原创 ngx_rbtree_init

在2. 代码分析这段代码是 Nginx 1.24.0 源码中的一个宏定义:,用于初始化一个红黑树(Red-Black Tree)结构。在 Nginx 中,红黑树是一种高效的自平衡二叉搜索树,常用于定时器管理、缓存索引、等需要快速插入、查找和删除的场景。这是一个带参数的 C 宏,接受三个参数:作用:初始化哨兵节点 。详细说明:在红黑树实现中,哨兵节点(sentinel) 是一个特殊的“空”节点,通常用作叶子节点的子节点(代替 ),简化边界条件处理。 是另一个宏哨兵节点不存储实际数据,

2025-12-22 17:59:34 266

原创 ngx_rbtree_sentinel_init

在。

2025-12-22 17:54:51 123

原创 ngx_array_init

void *elts;// 指向元素存储区// 当前元素个数// 单个元素大小(字节)// 已分配的容量(最多可存元素数)// 所属内存池。

2025-12-22 14:05:13 186

原创 ngx_pstrdup

在指定内存池中分配一块与源字符串等长的内存,并将源字符串的内容(src->data的src->len字节)完整复制过去,返回新内存的指针。

2025-12-21 19:23:25 306

原创 ngx_pnalloc

在。

2025-12-21 19:12:03 290

原创 ngx_destroy_pool

执行所有注册的清理函数(如关闭 fd、释放外部资源)。(调试时)打印将要释放的内存地址和未使用空间。释放所有 large 分配的内存块(直接 malloc 的大内存)。释放内存池自身所有 ngx_pool_t 块(包括主块和后续扩展块)。

2025-12-21 16:02:05 500

原创 ngx_pcalloc

在。

2025-12-21 10:57:10 397

原创 ngx_palloc

在。

2025-12-21 10:55:33 310

原创 ngx_palloc_large

直接系统分配大内存(因 size 太大,不适合用 pool 的小块)。尝试复用已释放的 large 节点(alloc == NULL 的节点),最多检查 4 个。若无法复用,则在 pool 的小块内存中分配一个 large 结构体,用于跟踪这块大内存。将新 large 节点插入链表头,便于后续管理和释放。最终返回大内存地址。

2025-12-21 10:47:15 829

原创 ngx_palloc_small

函数整体逻辑从 pool->current 开始,遍历内存池的现有内存块。在每个块中:获取空闲起始位置 last。如果需要对齐,则对齐指针。检查剩余空间是否足够。如果足够,更新 last 并返回地址。如果所有现有块都不够用,则调用 ngx_palloc_block 分配一个新块,并在其中分配内存。

2025-12-20 23:07:47 788

原创 ngx_palloc_block

分配一个与原始主块等大的新内存块;初始化该块的管理结构(end/next/failed/last);在新块中立即分配请求的 size 字节;将新块追加到内存池块链表末尾;更新 pool->current 指针以优化后续分配效率;返回分配到的内存地址。

2025-12-20 23:05:40 812

原创 ngx_timezone_update

函数的返回值是 void,且其内部计算的结果(尤其是在 Linux 分支中的 buf)确实没有被外部使用。那么,它的意义何在?答案是:这个函数的意义不在于“返回结果”,而在于其“副作用”——即通过调用某些系统函数,强制 C 运行时库(libc)刷新内部缓存的时区状态,从而确保后续调用 时间相关函数 时使用的是系统当前最新的时区设置。触发时区状态的重新加载操作系统和 C 标准库为了性能,通常会在进程启动时一次性读取时区信息并缓存。如果系统管理员在 nginx 运行期间修改了系统时区。

2025-12-20 22:17:07 715

原创 ngx_preinit_modules

该函数的整体作用ngx_preinit_modules() 是 Nginx 模块系统初始化的关键前置步骤,主要完成以下工作:为每个静态模块分配唯一 index(等于其在 ngx_modules 数组中的位置);关联模块名称(从 ngx_module_names 数组);统计静态模块数量(ngx_modules_n);预分配最大模块容量(ngx_max_module = 静态数 + 动态预留),为后续动态模块支持做准备。

2025-12-20 17:35:39 814

原创 ngx_add_inherited_sockets

在。

2025-12-20 17:11:16 214

原创 ngx_slab_sizes_init

ngx_slab_sizes_init() 的核心作用是:设定 slab 分配上限(ngx_slab_max_size = page/2),区分小块分配与大块(页级)分配。计算 exact 策略下的最优块大小(ngx_slab_exact_size),使得每页的块数等于一个 uintptr_t 的位数,从而用单个整数位图高效管理。计算对应的移位数(ngx_slab_exact_shift),用于后续快速地址计算。

2025-12-20 16:54:08 309

原创 ngx_crc32_table_init

函数整体作用ngx_crc32_table_init() 的作用是:确保 ngx_crc32_table_short 指向一个缓存行对齐的 CRC32 查找表副本,以优化 CPU 缓存性能。如果原始表已对齐,则直接返回;否则分配新内存、对齐、复制数据,并更新指针。

2025-12-20 15:31:42 569

原创 ngx_os_init

功能涉及变量/函数页面大小探测CPU 核心数探测ngx_ncpu缓存行大小优化进程标题初始化文件描述符限制非阻塞 socket 支持标志随机数初始化srandomOS 特定扩展这些初始化为 Nginx 的高性能、可移植性和资源管理奠定了坚实基础。

2025-12-20 15:06:11 661

原创 sysconf(_SC_NPROCESSORS_ONLN)

sysconf(_SC_NPROCESSORS_ONLN) 是 POSIX 标准中用于查询系统信息的一个系统调用,常用于 C 语言程序中获取当前系统中在线(可用)的处理器核心数量(逻辑 CPU 数量)。

2025-12-20 14:50:56 190

原创 ngx_init_setproctitle

该函数的核心作用:计算并分配堆内存,用于存放环境变量的副本。定位原始命令行参数(argv)和环境变量(environ)在内存中的连续区域末尾。将 environ 中指向该连续区域的字符串指针,重定向到新分配的堆内存。记录可安全覆盖的内存区域边界(ngx_os_argv_last),供后续 ngx_setproctitle() 使用。这样做的最终目的是:释放出从 argv[0] 开始的一段连续、可写的内存空间,用于动态修改进程标题,而不会破坏环境变量(因为 environ 已指向安全副本)。

2025-12-20 14:38:35 958

原创 ngx_os_specific_init

函数整体作用ngx_os_specific_init 的主要任务是在 Linux 平台上:获取内核信息(系统名称和版本)并保存到全局变量注册 Linux 专用的 I/O 操作函数集,使 Nginx 能高效利用 Linux 内核特性。

2025-12-19 16:33:23 593

原创 ngx_process_options

该函数的核心作用确定 Nginx 运行根目录(prefix):确定配置文件路径(conf_file):提取配置文件所在目录作为 conf_prefix:设置 error_log 路径保存额外配置参数和测试模式标志该函数是 Nginx 启动早期(main → ngx_init_cycle → ngx_process_options)的关键步骤,为后续读取配置、打开日志、加载模块奠定路径基础。

2025-12-19 15:31:56 653

原创 ngx_conf_full_name

ngx_conf_full_name 的主要用途是在 Nginx 配置解析过程中,将用户在配置文件中指定的相对路径转换为基于配置目录(或安装目录)的绝对路径。当 conf_prefix = 1(true)时:路径相对于配置文件所在目录解析当 conf_prefix = 0(false)时:路径相对于安装目录解析。

2025-12-19 15:22:16 600

原创 ngx_get_full_name

在。

2025-12-19 15:20:45 213

原创 ngx_test_full_name

在。

2025-12-19 15:15:04 300

原创 ngx_save_argv

在。

2025-12-19 13:24:06 234

原创 ngx_cpystrn

在。

2025-12-19 13:20:14 339

原创 ngx_alloc

在。

2025-12-19 12:59:42 271

原创 ngx_create_pool

的作用创建一个初始内存池,用于高效、低碎片地管理小块内存分配,并支持大内存、清理函数等扩展机制。核心设计理念:ngx_pool_t存在于分配的内存块头部,节省额外指针开销。小内存池内分配,大内存单独管理:通过 max限制,避免大块内存浪费池空间。链式扩展:当一块用完,可分配新块并链接(d.next),current 指向当前活跃块。统一生命周期管理:所有从池中分配的内存、大块、注册的清理函数,在 ngx_destroy_pool 时一次性释放/执行,无需逐个 free。

2025-12-19 12:37:17 787

原创 ngx_memalign

在。

2025-12-19 11:41:28 277

原创 ngx_time_init 函数

在。

2025-12-18 22:08:00 769

原创 ngx_time_update 函数

的作用目标:高效、线程安全地缓存多种格式的时间字符串,避免在每次日志记录或 HTTP 响应时都调用系统时间函数和格式化函数。优化:循环缓冲区(slot 机制):避免覆盖正在被读取的数据。秒级去重:同 1 秒内只更新毫秒,不重新格式化。写时加锁、读时不加锁:通过指针切换实现高效并发读。多格式预生成:HTTP、日志、syslog 等格式一次性生成,供多处复用。内存屏障:保证多核一致性。

2025-12-18 22:04:10 714

原创 ngx_memory_barrier

在。

2025-12-18 21:59:47 279

原创 ngx_localtime

在。

2025-12-18 21:50:56 299

原创 ngx_gmtime

函数作用ngx_gmtime是一个不依赖标准库的 UTC 时间分解函数,将 Unix 时间戳转换为年、月、日、时、分、秒、星期,并考虑:仅支持非负时间戳;最大到 9999-12-31;使用基于 March 1 的日历算法(便于处理闰年);

2025-12-18 19:56:31 898

原创 ngx_monotonic_time

函数作用的作用是:获取系统自启动以来的单调时间(不受系统时钟调整影响),并以毫秒为单位返回。典型应用场景HTTP 请求超时计算连接 keepalive 计时事件循环中的定时器管理避免因系统时间回拨导致的逻辑错误(如“未来时间”变成“过去”)

2025-12-18 15:35:55 296

原创 ngx_gettimeofday

在voidNULL;

2025-12-18 15:20:37 240

原创 ngx_trylock

结果输出到当前目录的打开这个文件查找函数由此可以确认。

2025-12-18 15:05:33 154

原创 ngx_get_options

在。

2025-12-17 22:27:49 97

springboot-MyBatisPlus

springboot-MyBatisPlus

2023-03-29

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除