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