Nginx
文章平均质量分 82
cywosp
这个作者很懒,什么都没留下…
展开
-
Nginx源码分析-内存池
Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。一、创建一个内存池nginx内存池主要有下面两个结构来维护,他们分别维护了内存池的头部和数据部。此处数据部就是供用户分配小块内存的地方。//该结构用来维护内存池的数据块,供用户分配之用。 typedef struct { u_char *last; //转载 2011-12-01 15:38:07 · 1411 阅读 · 0 评论 -
Nginx源码分析---数组结构ngx_array_t
0. 序 本文开始介绍nginx的容器,先从最简单的数组开始。 数组实现文件:文件:./src/core/ngx_array.h/.c。.表示nginx-1.0.4代码目录,本文为/usr/src/nginx-1.0.4。1. 数组结构 1.1 ngx_array_t结构 nginx的数组结构为ngx_array_t,定义转载 2011-12-02 14:55:46 · 1312 阅读 · 0 评论 -
Nginx源码分析---hash结构ngx_hash_t(v1.0.4)
0. 序本文继续介绍nginx的数据结构——hash结构。 链表实现文件:文件:./src/core/ngx_hash.h/.c。.表示nginx-1.0.4代码目录,本文为/usr/src/nginx-1.0.4。 1. hash结构 nginx的hash结构比其list、array、queue等结构稍微复杂一些,下图是hash相关转载 2011-12-02 15:00:05 · 1778 阅读 · 0 评论 -
Nginx源码分析---队列结构ngx_queue_t
0. 序本文继续介绍nginx的数据结构——队列。链表实现文件:文件:./src/core/ngx_queue.h/.c。.表示nginx-1.0.4代码目录,本文为/usr/src/nginx-1.0.4。1.队列结构nginx的队列是由具有头节点的双向循环链表实现的,每一个节点结构为ngx_queue_t,定义如下。转载 2011-12-02 14:58:24 · 1362 阅读 · 0 评论 -
Nginx源码分析---内存池结构ngx_pool_t及内存管理
nginx对内存的管理由其自己实现的内存池结构ngx_pool_t来完成,本文重点叙述nginx的内存管理。 nginx内存管理相关文件:(1) ./src/os/unix/ngx_alloc.h/.c内存相关的操作,封装了最基本的内存分配函数如free/malloc/memalign/posix_memalign,分别被封装为ngx_free,ngx_alloc/ngx_转载 2011-12-02 14:54:18 · 1474 阅读 · 1 评论 -
Nginx源码分析---Nginx启动初始化过程(一)
Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个Nginx的入口,除了完成启动初始化任务以外,也必定是所有功能模块的入口之处。Nginx的初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开。下面具体看一下main函数为Nginx的启动过程做了哪些初始化方面的事情。(以下代码段都是顺序从main函数中摘取出来的, 对转载 2011-12-01 23:27:44 · 1580 阅读 · 0 评论 -
Nginx源码分析---链表结构ngx_list_t
0. 序 本文继续介绍nginx的容器——链表。链表实现文件:文件:./src/core/ngx_list.h/.c。.表示nginx-1.0.4代码目录,本文为/usr/src/nginx-1.0.4。1. 链表结构 1.1 ngx_list_t结构 nginx的链表(头)结构为ngx_list_t,链表节点结构转载 2011-12-02 14:56:55 · 1336 阅读 · 0 评论 -
Nginx源码分析--master进程
Nginx分为Single和Master两种进程模型,Single模型即为单进程方式工作,具有较差的容错能力,不适合生产之用。Master模型即为一个master进程+N个worker进程的工作方式。生产环境都是用master-worker模型来工作。本文着重分析Nginx的master进程做了哪些事情,它是如何管理好各个worker进程的。在具体分析代码之前,先附上一张master进程的全貌图:转载 2011-12-01 22:28:39 · 3237 阅读 · 0 评论 -
Nginx源码分析--master和worker进程间的通信
前面单独分析了master进程和worker的工作情况,本文就大概看一下master进程和worker进程之间是如何使用channel来完成通信的。这部分实现的源码主要分布于src/os/unix/channel.h和channel.c两个文件中。实现极其简单,没有什么复杂的逻辑。下面,我绘制了一个简单的master进程和worker进程间的关系,图中的箭头符号指出数据是由master进程传给wo转载 2011-12-01 21:20:27 · 1668 阅读 · 0 评论 -
Nginx源码分析---模块初始化
Content0. 序1. nginx有哪些模块?2. nginx如何描述这些模块?2.1 模块数据结构2.1.1 ngx_module_t结构2.1.2 ngx_command_t结构2.2 模块类图3. nginx如何组织这些模块?3.1 全局数组ngx_modules3转载 2011-12-02 14:51:10 · 2470 阅读 · 0 评论 -
Nginx源码分析---Nginx启动初始化过程(二)
在Nginx启动初始化过程(一)中提到main函数会调用ngx_init_cycle()初始化一个全局cycle变量,本文就来看看这个ngx_init_cycle()函数究竟做了哪些初始化工作。ngx_cycle_t结构类型被定义在src/core/ngx_cycle.h文件中,多达23个成员变量(nginx-0.7.67),由于ngx_init_cycle()函数的代码多达近800行,绝对算大函转载 2011-12-01 23:39:35 · 1661 阅读 · 0 评论 -
Nginx源码分析---worker进程
上一篇博文分析了master进程,本文着手分析一下worker进程的情况。首先找到worker进程的入口地方——ngx_worker_process_cycle。这个函数不光是worker进程的入口函数,同时也是worker进程循环工作的主体函数,看函数名含有一个cycle嘛。进入这个cycle函数,第一件事就是调用ngx_worker_process_init(cycle, 1);对worker转载 2011-12-01 23:01:27 · 2263 阅读 · 0 评论 -
Nginx源码分析--事件驱动的初始化
Nginx的高性能应该算是事件驱动的功劳。Nginx事件处理的相关代码位于src/event目录中,事件驱动是Nginx的核心,所以代码量相对也比较大。事件驱动初始化的过程主要由下图中的三步组成。第一步:解析配置文件的初始化在Nginx的启动初始化过程中,将调用ngx_conf_parse()解析配置文件,此过程将遇到类似如下的配置项:events { w转载 2011-12-01 21:12:31 · 1514 阅读 · 0 评论 -
Nginx源码分析-事件循环
事件循环这个概念貌似在windows编程中提得更多,Linux程序却很少提及这个概念。本文所提及的事件循环其实就是worker cycle,由于此处将关注的不再是worker进程,而是worker进程在循环过程中关于事件处理的环节,因此就盗用了事件循环这个概念。在具体看代码前,先看一下这个“循环”的概貌:经过前面相关博文的介绍,我们了解到master进程创建好一个worker进程后,w转载 2011-12-01 17:13:52 · 1602 阅读 · 0 评论 -
Nginx源码剖析之内存池,与内存管理
Nginx源码剖析之内存池,与内存管理作者:July、dreamice、阿波、yixiao。出处:http://blog.csdn.net/v_JULY_v/。引言 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。转载 2011-12-05 23:35:09 · 7345 阅读 · 6 评论