
Nginx源码分析
文章平均质量分 83
Mango酱
这个作者很懒,什么都没留下…
展开
-
09Nginx源码分析之哈希结构(ngx_hash.c)
一 哈希结构 关于哈希的相关概念,可以先参考以下文章。 https://blog.youkuaiyun.com/weixin_44517656/article/details/105215349 注意: 下面的词语桶和槽是一样的,有些人习惯将桶称之为槽。 在阅读Nginx的hash结构时,一定不能着急,否则会让自己怒火中烧,建议大家都使用3-4天去消化。 Nginx的hash表结构主要几个特点: 1)静态只读。当初始化生成hash表结构后,是不能动态修改这个hash表结构的内容。 2)将内存利用最大化。Nginx的原创 2021-03-30 21:30:09 · 633 阅读 · 2 评论 -
08Nginx源码分析之单向链表结构(ngx_list.c)
一 单向链表结构 Nginx的list单向链表的结构和Nginx的数组结构Array有点类似,总体来说,数据结构也是非常简单清晰的。 1 ngx_list_t 链表结构 ngx_list_t是管理链表的结构,包含以下成员。 /** * 链表结构 */ typedef struct { ngx_list_part_t *last; /* 指向链表的尾节点*/ ngx_list_part_t part; /* 指向链表的第一个节点*/ size_t s原创 2021-03-13 11:54:19 · 142 阅读 · 0 评论 -
07Nginx源码分析之双向链表结构(ngx_queue.c)
一 双向链表结构 Nginx的链表结构非常小巧和简单。设计的非常精巧。通过链表的简单和精巧的设计,让Nginx的链表的数据结构和具体业务依赖进行了解耦。 1 双向链表的数据结构 非常简单,不存任何其它类型的内容,只包含了链表的前后节点,使用时通过作为其它数据结构的成员使用。 typedef struct ngx_queue_s ngx_queue_t; struct ngx_queue_s { ngx_queue_t *prev; ngx_queue_t *next; }; 例如双向链表在业务上被原创 2021-03-12 19:24:28 · 197 阅读 · 0 评论 -
06Nginx源码分析之缓冲区结构(ngx_buf.c)
概述: 缓冲区ngx_buf_t是nginx处理大数据的关键数据结构,它既应用于内存数据也应用于磁盘数据。 一 数组结构结构定义 1. 缓冲区内存块的数据结构 ngx_buf_t typedef void * ngx_buf_tag_t; typedef struct ngx_buf_s ngx_buf_t; /** * Nginx缓冲区 */ struct ngx_buf_s { u_char *pos; /* 待处理数据的开始标原创 2021-02-26 20:16:48 · 633 阅读 · 0 评论 -
05Nginx源码分析之数组结构(ngx_array.c)
03Nginx源码分析之数组结构ngx_array.c 前言: 前面一章我们介绍了Nginx的内存池的数据结构。Nginx的内存管理都是围绕内存池来实现的,包括array数组类型也是基于Nginx的pool来实现数据结构。 Nginx的Array结构设计得非常小巧,主要用于存储小块内存。该数组存储在内存池数据域中,因为该数据域本来就主要存储小块内存的,并且内存池的大小被上篇讲到的宏NGX_MAX_ALLOC_FROM_POOL给限制。存储大内存的话会被nginx的开发人员人为放在nginx的large中处理原创 2020-11-05 22:58:13 · 195 阅读 · 0 评论 -
04Nginx源码分析之内存池(ngx_palloc.c)
02Nginx源码分析之内存池 前言: Nginx的内存管理是通过内存池来实现的。Nginx的内存池的设计非常的精巧,很多场景下,我们可以将Nginx的内存池实现抽象出来改造成我们开发中的内存池。 1 为何使用内存池 一般我们使用malloc/alloc/free等函数来分配和释放内存。但是直接使用这些函数会有一些弊端: 1)虽然系统自带的ptmalloc内存分配管理器,也有自己的内存优化管理方案(申请内存块以及将内存交还给系统都有自己的优化方案,具体可以研究一下ptmalloc的源码),但是直接使用mal原创 2020-11-07 19:37:34 · 351 阅读 · 0 评论 -
03Nginx源码分析之分析内存对齐宏(ngx_align,ngx_align_ptr)
03Nginx源码分析之分析内存对齐宏ngx_align_ptr 1 ngx_align_ptr // p 是内存指针,a 是对齐字节数(必须是2的幂次方结果) #define ngx_align_ptr(p, a) \ (u_char *) (((uintptr_t) (p) + ((uintptr_t) a - 1)) & ~((uintptr_t) a - 1)) 以下假设为64位机原创 2020-11-07 20:34:55 · 517 阅读 · 0 评论 -
02Nginx源码分析之总结内存开辟的相关函数(ngx_alloc.c,ngx_palloc.c)
02Nginx源码分析之总结内存开辟的相关函数(ngx_alloc.c,ngx_palloc.c) 前言: 写这一篇的目的是为了方便接下来的阅读,否则每次都要对应查找相应的函数,非常麻烦。 1 首先说ngx_alloc.c源文件中的开辟函数 1)ngx_alloc函数 /* * 功能:调用malloc开辟内存 */ void * ngx_alloc(size_t size, ngx_log_t *log) { void *p; p = malloc(size); if (p =原创 2020-11-07 19:06:52 · 484 阅读 · 0 评论 -
01Nginx源码分析之初探Nginx架构
01Nginx源码分析之初探Nginx架构 注:接下来的源码分析我都是参考以下这位博主的,但是有些地方不对的我会修改,毕竟每个人理解不一样。 自娱自乐的代码人 1 初探Nginx架构 第一篇没什么好讲的,参考下面博客即可。 Nginx源码分析 - 初探Nginx的架构 ...原创 2020-11-05 20:14:35 · 213 阅读 · 1 评论