![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Nginx
文章平均质量分 75
随心而动随意而行
time waits no man
展开
-
剖析ngx_queue
由于本人水平有限,文章中难免会有错误,还望指正,不胜感激.nginx双向链表特点: 1.其数据结构仅有两个指针 prev和next 2.不分配内存空间 3.操作简单,仅仅移动指针的前后指向 4.可以链接不同的数据,只要数据中包含queue这种数据成员先来张图:这里的哨兵指的是 :原创 2013-12-08 21:35:13 · 831 阅读 · 0 评论 -
ngx_conf_read_token函数
当解析配置文件时候,会构造一个buf,来存放从配置文件中读取的数据.每次解析出一组相关token就会返回.1.遇到{表示遇到复杂配置,需要循环调用ngx_conf_read_token解析函数.2.遇到;表示解析简单配置完毕,进行下一组解析.3.遇到错误.buf大小为4096bty,即4k.一个buf中数据为四种:未解析字符:已经读入buf中,但是还未进行扫描已扫描字符原创 2014-01-26 20:45:12 · 2955 阅读 · 0 评论 -
ngx_connection_t结构体
//服务器的被动连接struct ngx_connection_s { //连接未使用时候,data域充当连接链表中的next指针. //当连接被使用时候,data域的意义由模块而定. void *data; //连接对应的读事件 ngx_event_t *read; //连接对应的写事件 ngx_event_t原创 2014-01-26 12:18:47 · 5920 阅读 · 0 评论 -
nginx-----master中的信号处理
1.nginx信号集ngx_signal_t signals[] = { { ngx_signal_value(NGX_RECONFIGURE_SIGNAL), "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL), "reload", ngx_signal_handler }, { ngx_signal_va原创 2013-12-25 12:53:12 · 1508 阅读 · 0 评论 -
ngx_master_process_cycle主循环体
这是ngx_master_process_cycle中主循环中的一次循环.注意:ngx_master_process_cycle的主循环体是无限循环,直到退出(收到相关信号).for ( ;; ) { if (delay) { if (ngx_sigalrm) { sigio = 0;原创 2013-12-25 12:29:29 · 885 阅读 · 0 评论 -
ngx_epoll详解
以前我们讲过Linux中的epoll,其实nginx中的各种设计和Linux中的设计非常像(链表,内存管理等).nginx中的epoll和Linux中的epoll机制几乎完全相同.现在我们来总结一下nginx中epoll的特点:两种重要的数据结构: 1.双向链表:用于存放已完成的事件,即已完成队列. 2.红黑树,用于事件的插入,查找和删除. 当事件来注册的时原创 2013-12-22 09:06:50 · 666 阅读 · 0 评论 -
nginx event初始化流程
1.在nginx.c中设置每个核心模块的index ngx_max_module = 0; for (i = 0; ngx_modules[i]; i++) { ngx_modules[i]->index = ngx_max_module++; }2.进入函数ngx_init_cycle,调用每个核心模块的create_conffor (i =原创 2013-12-21 21:25:59 · 822 阅读 · 0 评论 -
nginx的事件驱动模型
nginx的事件驱动机制: 事件发生源产生事件->事件收集器来收集分发事件(选择自己感兴趣的)->消费事件.传统web服务器(例如apache)的事件驱动机制: 当一个连接到来时候,事件驱动,建立连接.当连接建立以后直到关闭之前进程将退化成按顺序执行每个操作的批处理模式.每个请求的始终占据资源,无论是否进行数据传输.尤其是中途的阻塞,会造成资源的极大浪费.这种传统的原创 2013-12-21 20:36:12 · 1780 阅读 · 1 评论 -
ngx_event_block 函数解析
static char *ngx_events_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf){ char *rv; void ***ctx; ngx_uint_t i; ngx_conf_t pcf原创 2013-12-21 20:11:39 · 793 阅读 · 0 评论 -
nginx上下文总会
从上图可以看到,nginx共有6个核心模块,每个核心模块又有好多子模块,每个核心模块有一个core模块,这些模块以及各种定制模块共同构成了nginx服务器.每个核心模块都是抽象的,并不涉及模块的具体内容,而子模块(具体模块)则专门负责一项任务,专注的去完成,从整体上看,每个模块都是ngx_module_t类型,那子模块和核心模块怎么来进行区分呢?这就引出了ngx设计的核心,上下文,利用一个指针原创 2013-12-21 19:57:03 · 1453 阅读 · 0 评论 -
cycle结构体的四级指针详解
cycle有一个四级指针,这个指针也是这个结构体最重要的成员之一.我们来仔细看一下这个四级指针.struct ngx_cycle_s { void ****conf_ctx;.....};那么他指向何处呢(ngx初始化就是将各种指针串起来)?我们以event模块为例,讲述一下四级指针完成建立过程,其他核心模块也是一样的,所有模块都由一个co原创 2013-12-21 19:32:22 · 2999 阅读 · 0 评论 -
nginx slab 机制
如果你们的文明是叫我们卑躬屈膝,那我就带你看见野蛮的骄傲. --------------莫纳道鲁 日本人比森林里的树叶还要繁密,比浊水溪的石头还要多,但是我反抗的决心比奇莱山还要坚定.原创 2014-01-02 01:22:41 · 3783 阅读 · 1 评论 -
nginx 内存池
nginx的设计思想是小块内存用自己的内存池pool分配,大块内存用malloc分配,并且大块内存和小块内存的管理结构都存储在pool中,由他们管理. nginx采用多次分配,一次释放,即一次connect或request完成后,大块小块内存一同释放. 看一下内存池的基本数据结构:struct ngx_pool_large_s { ngx_pool_larg原创 2014-01-03 11:07:39 · 779 阅读 · 0 评论 -
内存分配-----伙伴算法和slab算法
内存管理问题:内存碎片大小和管理内存碎片的效率问题(即空间和时间效率的问题):内存碎片是指当回收一块内存时,一般将内存直接放入free链表中,由于内存越分配越小,内存块就会特别多而且特别小,当需要一块大的内存块的时候无法找到.原因就在于回收内存的时候,不能把相邻两块可用内存合并.解决方法:1.小块内存单独分配,大块内存有系统自动分配.(nginx和stl就是使用这种方法)2.伙原创 2014-01-02 09:39:03 · 15970 阅读 · 0 评论 -
nginx main流程分析
int ngx_cdeclmain(int argc, char *const * argv){ ngx_int_t i; ngx_log_t * log; ngx_cycle_t * cycle, init_cycle ; ngx_core_conf_t * ccf; /*原创 2013-12-18 14:41:55 · 1129 阅读 · 0 评论 -
nginx : ngx_cycle_t结构体
//我们来看一看这神奇的ngx_cycle_s结构体吧,看一看庐山真面目.struct ngx_cycle_s { /* 保存着所有模块配置项的结构体指针p,它首先是一个数组, 该数组每个成员又是一个指针,这个指针又指向了存储着指针的数组.*/ void **** conf_ctx ; //内存池 ngx_poo原创 2013-12-16 23:57:39 · 1220 阅读 · 0 评论 -
epoll
epoll 大家一谈到I/O复用必使用epoll,epoll真的那么好吗?epoll有什么有点呢?我们这里来说一说epoll的优点以及为了实现这些优点背后都做了什么. 首先我们来讲一讲select的缺点: 1.每次select返回时候都要重新设置描述字,即每次调用select都要在内核和用户空间进行拷贝描述字.耗时耗力. 2.在select实现中,原创 2013-12-11 20:50:14 · 738 阅读 · 0 评论 -
ngx_conf_parse函数
这里要先看一下配置文件格式:worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_ti原创 2014-01-26 20:35:44 · 3619 阅读 · 0 评论