文章6:Nginx初始化、启动过程分析

文章内容:
一、学习方法如下:
二、概括如下:我的总结
      2.1Nginx的启动是在/src/core/nginx.c中进行
      2.2主要概括为两部分:
            2.2.1加载和初始化各个模块
            2.2.2创建进程和进程间的通信机制
三、三张调用图片

说明:关于Nginx初始化以及启动,有很多内容在介绍,也有很多人介绍的非常详细。这儿我就说一下我学习这部分的方法。
一、学习方法如下:
     1.安装好Eclipse开发环境,方便查阅Nginx代码,代码永远是最好的教程。 文章2 Linux安装Eclipse调试程序
     2.阅读livelylittlefish关于nginx的文章,其文章列表 http://blog.csdn.net/livelylittlefish/article/category/838107,首先阅读模块及其初始化和启动流程两部分,再根据里面涉及的文章再去阅读。
     之所以这样做,是先对整个过程有个了解。并且通过阅读代码从而了解整个过程。
     3.阅读《nginx模块开发指南(中文).pdf》和《nginx源码分析.doc》和 http://blog.csdn.net/kenbinzhang/article/details/4681694  启动过程分析,进一步了解整个过程
文章下载地址
http://download.csdn.net/detail/yankai0219/4586192  《nginx模块开发指南(中文).pdf》
http://download.csdn.net/detail/yankai0219/4586189nginx源码分析.doc
     4.最后一步也是最关键的一步,自己总结整个过程。
二、概括如下:我的总结
2.1Nginx的启动是在/src/core/nginx.c中进行
2.2主要概括为两部分:
加载和初始化各个模块,完成各个模块的配置与相互关联
创建进程和进程间的通信机制

2.2.1加载和初始化各个模块
1)以nginx.c的函数ngx_init_cycle为分水岭,之前的工作主要是为结构体ngx_cycle_t init_cycle赋值。
2)通过函数ngx_init_cycle,加载和初始化各个模块,完成各个模块的配置与相互关联

2.2.2创建进程和进程间的通信机制
1)采用master-worker方式,master进程负责管理各个worker子进程,通过socketpair向子进程发送消息
2)各个worker子进程服务利用事件处理机制处理请求。通过socketpair与其他子进程通信
3)进程启动的各个恰当机会会调用模块的init_module,init_process,exit_process,exit_master等钩子。不会调用init_master钩子
下图:启动过程中函数的调用关系(该图片为转载)
文章6:Nginx初始化、启动过程分析_第1张图片
下图:ngx_init_cycle部分的函数调用关系
文章6:Nginx初始化、启动过程分析_第2张图片
下图:master-worker进程间通信
文章6:Nginx初始化、启动过程分析_第3张图片

你可能感兴趣的:(文章6:Nginx初始化、启动过程分析)