
Server - 菜鸟nginx源码剖析
文章平均质量分 94
chen19870707
大家一起多交流~!
展开
-
菜鸟nginx源码剖析 配置与部署篇(一) 手把手实现nginx "I love you"
还记得在前几年的优快云泄漏账号事件中,统计发现程序员的账号中含有love的最多,这里我也俗套下,在这篇文章中将讲解如何 一步一步实用Nginx在一台机器上搭建一个最简单的显示“I love you”的Web服务器,大家一起动手尝试吧。原创 2014-11-08 16:56:20 · 5346 阅读 · 4 评论 -
菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表ngx_chain_t
nginx 缓冲区链表的源码剖析原创 2014-11-06 19:54:56 · 16618 阅读 · 3 评论 -
菜鸟nginx源码剖析数据结构篇(二) 双向链表ngx_queue_t
ngx_queue作为顺序容器链表,它优势在于其可以高效地执行插入、删除、合并操作,在插入删除的过程中,只需要修改指针指向,而不需要拷贝数据,因此,对于频繁修改的容器很适合。此外,相对于STL list,它还具有以下特点:自身实现了排序功能轻量级,不负责内存的分配自身支持两个链表的合并原创 2014-10-22 09:20:56 · 11426 阅读 · 5 评论 -
菜鸟nginx源码剖析数据结构篇(七) 哈希表 ngx_hash_t(下)
菜鸟nginx源码剖析数据结构篇(七) 哈希表 ngx_hash_t(下) Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.youkuaiyun.com/chen19870707 Date:Nov 3rd, 2014 在前面一篇文章《菜鸟nginx源码剖析数据结构篇(六) 哈希原创 2014-11-03 12:42:50 · 13216 阅读 · 1 评论 -
菜鸟nginx源码剖析数据结构篇(六) 哈希表 ngx_hash_t(上)
哈希表是一种典型的以空间换取时间的数据结构,在没有冲突的情况下,对任意元素的插入、索引、删除的时间复杂度都是O(1)。这样优秀的时间复杂度是通过将元素的key值以hash方法f映射到哈希表中的某一个位置来访问记录来实现的,即键值为key的元素必定存储在哈希表中的f(key)的位置。当然,不同的元素的hash值可能相同,这就是hash冲突,有两种解决方法(分离链表发和开放地址发),ngx采用的是开放地址法.分离链表法是通过将冲突的元素链接在一个哈希表外的一个链表中,这样,找到hash表中的位置后,就可以通过原创 2014-11-04 21:46:36 · 15300 阅读 · 2 评论 -
菜鸟nginx源码剖析数据结构篇(十一) 共享内存ngx_shm_t
共享内存是Linux下提供的最基本的进程通信方法,它通过mmap或者shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap或者shmdt系统调用释放这块内存,使用共享内存的好处是多个进程使用同一块内存时,在任何一个进程修改了共享内存中的内容后,其它进程通过访问这段内存就能够得到内存变化。这里探讨nginx对共享内存的封装。原创 2014-11-14 16:04:57 · 11661 阅读 · 0 评论 -
菜鸟nginx源码剖析数据结构篇(五) 基数树 ngx_radix_tree_t
基数树(radix tree)是一种不怎么常见的数据结构,这里简单的做一下介绍:在计算机科学中,基数树,是一种基于trie(字典树)的特殊的数据结构,可以快速定位叶子结点。radix tree是一种多叉搜索树,每个结点有固定的孩子数(叉数 为2^n).原创 2014-10-28 17:20:14 · 11915 阅读 · 3 评论 -
菜鸟nginx源码剖析数据结构篇(三) 单向链表 ngx_list_t
ngx_list _t是一个顺序容器,它实际上是动态数组和单向链表的结合体,扩容起来比动态数组简单的多,可以一次扩容一个数组,所以说它结合了 链表插入删除不需要移动的 和 数组下标快速索引 的优势,设计非常让人叫绝,此外它还有以下特点:链表中存储的元素是灵活的,可以是任何一种数据结构。链表元素需要占用的内存由ngx_list_t管理,它已经通过数组分配好了。小块的内存使用链表访问O(n)效率是低下的,可以使用数组通过直接通过偏移量来直接访问O(1)。原创 2014-10-23 17:20:07 · 11838 阅读 · 7 评论 -
菜鸟nginx源码剖析数据结构篇(四)红黑树ngx_rbtree_t
ngx_rbtree是一种使用红黑树实现的关联容器,关于红黑树的特性,在《手把手实现红黑树》已经详细介绍,这里就只探讨ngx_rbtree与众不同的地方;ngx_rbtree红黑树容器中的元素都是有序的,支持快速索引,插入,删除操作,也支持范围查询,遍历操作,应用非常广泛。原创 2014-10-27 21:17:22 · 18259 阅读 · 7 评论 -
菜鸟nginx源码剖析数据结构篇(一)动态数组ngx_array_t
菜鸟nginx源码剖析数据结构篇(四)红黑树ngx_rbtree_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.youkuaiyun.com/chen19870707 Date:October 27h, 2014 1.ngx_rbtree优势和特点原创 2014-10-21 13:54:52 · 68265 阅读 · 8 评论 -
菜鸟nginx源码剖析 框架篇(一) 从main函数看nginx启动流程
俗话说的好,牵牛要牵牛鼻子 驾车顶牛,处理复杂的东西,只要抓住重点,才能理清脉络,不至于深陷其中,不能自拔。对复杂的nginx而言,main函数就是“牛之鼻”,只要能理清main函数,就一定能理解其中的奥秘,下面我们就一起来研究一下nginx的main函数。原创 2014-11-12 20:52:48 · 27591 阅读 · 5 评论 -
菜鸟nginx源码剖析数据结构篇(九) 内存池ngx_pool_t
今天是一年一度的光棍节,还没有女朋友的程序猿童鞋不妨new一个出来,内存管理一直是C/C++中最棘手的部分,远不止new/delete、malloc/free这么简单。随着代码量的递增,程序结构复杂度的提高。今天我们就一起研究一下以精巧著称的nginx的内存池。原创 2014-11-11 19:08:07 · 26228 阅读 · 10 评论 -
菜鸟nginx源码剖析数据结构篇(十) 自旋锁ngx_spinlock
自旋锁(Spinlock)是一种 Linux 内核中广泛运用的底层同步机制。自旋锁是一种工作于多处理器环境的特殊的锁,在单处理环境中自旋锁的操作被替换为空操作。当某个处理器上的内核执行线程申请自旋锁时,如果锁可用,则获得锁,然后执行临界区操作,最后释放锁;如果锁已被占用,线程并不会转入睡眠状态,而是忙等待该锁,一旦锁被释放,则第一个感知此信息的线程将获得锁。原创 2014-11-11 20:48:16 · 17986 阅读 · 0 评论 -
Epoll详解及源码分析
epoll是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和select相似,都是I/O多路复用(IO multiplexing)技术,按照man手册的说法:是为处理大批量句柄而作了改进的poll。原创 2015-01-08 15:45:34 · 22995 阅读 · 6 评论