![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Nginx数据结构
北海宇微
生命源于感动,感动让我们有了羁绊,让我们有了不舍,让我们在生去生命那—刻可以笑看人生一一一一我来过
展开
-
Nginx源码初探之事件模块-用户请求建立连接
事件处理框架介绍 Nginx基于事件驱动架构的Web服务器,负责这个功能的主要模块就是事件处理模块。事件处理模块主要解决如何收集、管理、分发事件(主要是网络事件和定时器事件)。由于网络事件与网卡中断处理程序,内核提供的系统调用密切相关,所以网络事件的驱动既取决与不同的操作系统,也取决于操作系统不同的操作系统内核版本。Nginx定义了一些列的事件驱动模块:ngx_devpoll_...原创 2020-01-14 17:33:26 · 2518 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 哈希数据结构
Nginx哈希数据结构介绍 Nginx中的hash数据结构主要用来存储配置数据,比如url=ip的映射关系。Nginx中只提供了初始化的方法,也就是Hash结构一旦初始化后是不允许修改的,这样一方面提高了内存的利用率,另一方面提高了查询效率。Nginx实现了两类Hash结构,一类是ngx_hash_wildcard_t通过指针指向具体数据,一类是ngx_hash_t。1...原创 2020-01-13 11:14:34 · 4100 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 内存池结构
为了避免出现内存碎片,避免反复向操作系统申请内存,Nginx设计了简单的内存池。nginx内存池根据用户请求逐级分配,逐级释放。整体上内存池分为三个等级进程级(master/worker),connection级(用户连接),request级(请求处理)三个不同的层级。启动启动时创建main级别内存池,然后master/work进程创建内存池,当有连接进来的时候,创建一个conne...原创 2020-01-10 10:36:28 · 2509 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 红黑树数据结构
Nginx红黑树介绍 红黑树是Nginx里的高级数据结构。什么是红黑树呢?红黑树是一种平衡二叉树,简单的说就是它是一棵空树,或者左右子树高差绝对值不超过1,且左右子树都是平衡二叉树。时间复杂度O(log n)。除此之外还有如下特性(1)节点都有颜色,要么黑色,要么红色。(2)根结点是黑色的,叶子结点是黑色的。(3)每条从树到叶子的路上没有二个连续的红色。即红色的子树一定是黑...原创 2020-01-12 19:58:01 · 4164 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 链表数据结构
ngx_list_t 介绍 ngx_list_t是Nginx中使用的较为频繁的数据结构,数据内容基于指针获取,内存分配基于内存池进行。由于数据内容存放的是指针,所以理论上ngx_list_t可以用来构建多维链表甚至是网络结构,只是Nginx原始代码封装的函数中并不涉及这些数据结构的操作(实际上也不需要)。1.数据结构 Nginx链表的数据结构包含两个部分ngx...原创 2020-01-12 13:29:54 · 1527 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 模块数据结构
Nginx架构最大的特点就是模块化结构体系,ngx_module_s定义了一个模块应该包含的基础属性,包括名称,版本,指令,类型,进程管理,线程管理等内容。1.数据结构struct ngx_module_s { /*前七个属性对应于宏NGX_MODULE_V1*/ ngx_uint_t ctx_index;/*模块标识,每个模块的唯一...原创 2020-01-10 15:48:17 · 839 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 缓冲区结构
Nginx通过内存池使用内存,需要从内存池中申请资源在缓存使用上。可以对零散的缓冲区碎片进行了统一的管理和再分配,从而提高了缓冲区的利用率。其中最底层的数据结构,就是内存块数据结构和内存块链表数据结构。1.数据结构 ngx_buf_t是Nginx系统中系统分配内存的基本单位。ngx_buf_t分为三部分,内存块部分,文件部分,元数据,并分别提供了控制机制。也就...原创 2020-01-10 08:49:28 · 499 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 数组数据结构
nginx内部使用的数组结构是ngx_array_t,ngx_array_t是一个顺序容器,以数组的形式存储元素,并能够在容量达到最大值时动态扩容。Nginx数组属于基础数据结构部分,只要具备一定的开发经验,可以参考自己所熟悉的其他框架的数组。值得重复提出的一点是Nginx数组的内存事宜遵循,Nginx内存使用的类别化,层级化的原则,内存的使用在内存池中进行。1.数据结构t...原创 2020-01-12 12:50:46 · 2518 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 队列数据结构
队列介绍 队列是有序集合,先进先出FIFO,队列的概念很好理解,队列的应用也非常广泛如:循环队列、阻塞队列、并发队列、优先级队列等。Nginx数据结构是循环队列,prev前置节点环和next后置节点环。 Nginx链表还是非常有特色的,它是一种轻量级链表,这种链表不包含数据内容,只包含前后节点指针。在使用的时候需要作为带有节点变量的结构体(宿主)的成员变量存在(寄宿...原创 2020-01-13 09:27:08 · 4100 阅读 · 0 评论 -
Nginx源码初探之数据结构 - cycle数据结构
ngx_cycle_t介绍 ngx_cycle_t是Nginx的私有结构体,换句话说是Nginx的业务结构体。Nginx核心的框架代码都是围绕ngx_cycle_t展开的。无论是master管理进程、worker工作进程还是cache manager(loader)进程,都拥有一个唯一的ngx_cycle_t结构体。服务在初始化时就是以ngx_cycle_t对象为中心来提供服务,...原创 2020-01-13 14:45:00 · 2693 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 链接数据结构
ngx_event_t事件和ngx_connection_t连接是处理TCP连接的基础数据结构。Nginx处理请求连接有三个主要的数据结构,ngx_cycle_t全局变量结构体,ngx_connection_t网络链接结构体,ngx_listening_t网络监听结构体。这三个结构体是nginx事件模块的核心结构体。ngx_connection_t存储网络链接和读写事件,ngx_li...原创 2020-01-13 15:32:04 · 4219 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 基数树数据结构
基数树介绍 基数树也叫做压缩前缀树,是一种多叉搜索树,对比其他结构跟节省空间。基数树常见于IP路由检索,文本文档的的倒排索引等场景中。同时基数树也是按照字典顺序来组织叶节点的,这种特点使之适合持久化改造,加上他的多道特点,灵活性较强,适合作为区块链的基础数据结构,构建持久性区块时较好的映射各类数据集合。Nginx基数树的实现 Nginx中基数树的实现是一种二叉查...原创 2020-01-14 09:42:42 · 4215 阅读 · 0 评论