
nginx
文章平均质量分 82
linuxcprimerapue
这个作者很懒,什么都没留下…
展开
-
nginx进程间的通信机制源码分析(二)-------原子操作、自旋锁、文件锁
原子操作原子操作指的是由多步组成的一个操作.如果该操作原子的执行,则要么执行玩所有步骤,要么一步也不执行,不可能值执行所有步骤的一个子集.想要使用原子擦操作来修改,获取整型变量,自然不能使用加减号,而要使用nginx提供的两个方法:ngx_atomic_cmp_set和ngx_atomic_fetch_add.static ngx_inline ngx_atomic_uint_tng原创 2015-08-06 15:49:02 · 637 阅读 · 0 评论 -
Nginx高级数据结构源码分析(三)-----链表
ngx_list_t是Nginx封装的链表容器,使用的很频繁。它有两个结构体,ngx_list_t描述的是整个链表,而ngx_list_part_t只描述链表的一个元素。为了方便理解,我们可以将它称为数组的链表。也就是是说,ngx_list_t是一个链表容器,而链表中的元素又是一个数组。事实上,ngx_list_part_t数组中的元素才是用户需要存储的东西。这样的结构表达方式有什么样的好处:原创 2015-08-26 17:21:29 · 544 阅读 · 0 评论 -
nginx高级数据结构源码分析(一)-----双向链表
ng_queue_t是Nginx提供的一个顺序容器,它以双向链表的方式将数据组织在一起。链表作为顺序容器的优势在于,它可以高效的执行插入、删除、合并等操作,在移动链表中的元素时只需要修改指针的指向,因此,它很适合频繁修改容器的场合。相对于其他顺序容器,它的优势有以下三点: (1) 实现了排序功能,采用额是插入排序,虽然不太适合超大规模数据的排序,但是简单实用。(2) 它非常轻原创 2015-08-10 20:01:56 · 608 阅读 · 0 评论 -
Nginx高级数据结构源码分析(二)-----动态数组
ngx_array_t是一个顺序容器,它在Nginx中被大量使用。它以数组的形式存储元素,并支持在达到数组容量的上限动态时改变数组的大小。它类似于C++中的vector容器,而且内置了Nginx封装的内存池,因此,它分配的内存也是在内存池中申请得到。 ngx_array_t具备以下三个优点; (1)访问速度快;(2)允许元素个数具备不确定性;(3)负责元原创 2015-08-26 15:59:40 · 518 阅读 · 0 评论 -
Nginx高级数据结构源码分析(四)-----内存池
内存池的使用給Nginx带来了很多好处,比如内存使用的便利,逻辑代码的简化以及程序性能的提升。几个关键知识点罗列如下:(1)函数ngx_palloc()尝试从内存中分配size大小的内存时,分两种情况,一种是size大小小于pool->max,称为小块内存分配,若当前内存池节点小于size,则申请一个新的等同大小的内存池节点,然后从这个新内存池节点分配出size大小的内存空间。若size原创 2015-08-27 17:24:33 · 616 阅读 · 0 评论 -
Nginx高级数据结构源码分析(五)-----红黑树
红黑树是一种二叉平衡树,在每一个结点增加了一个存储位表示结点的颜色,以维持它的平衡。红黑树性质(1)红黑树结点有如下域:color,key,left,right,p;我们把这些NIL结点是为指向外结点的指针,可以自己定义;(2)每一个结点不是红的就是黑的,根节点和NIL结点都是黑的;(3)如果一个节点是红的,那么它的父亲和两个孩子都是黑的;(4)原创 2015-08-28 19:49:13 · 892 阅读 · 0 评论 -
nginx进程间的通信机制源码分析(一)----共享内存
共享内存是linux下提供的最基本的进程间通信方法,它通过mmap或者shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap和shmdt系统调用可以释放这块内存.使用共享内存的好处是当多个进程使用同一块共享内存时,在任何一个进程修改了共享内存中的内容后,其他进程通过访问这段共享内存都能够得到修改后的内容. 为了支持跨平台,nginx提供了三种共享内存的实现原创 2015-07-31 16:27:47 · 647 阅读 · 0 评论