- 2
- 0
- 约3.69万字
- 约 36页
- 2018-02-18 发布于浙江
- 举报
Nginx源码分析 - Nginx启动以及IO的CP模型
Nginx源码分析 - Nginx启动以及IOCP模型
本文档针对Nginx1.11.7版本,分析Windows下的相关代码,虽然服务器可能用Linux更多,但是windows平台下的代码也基本相似
,另外windows的IOCP完成端口,异步IO模型非常优秀,很值得一看。
Nginx启动
曾经有朋友问我,面对一个大项目的源代码,应该从何读起呢?我给他举了一个例子,我们学校大一大二是在紫金港校区,到了
大三搬到玉泉校区,但是大一的时候也会有时候有事情要去玉泉办。偶尔会去玉泉,但是玉泉校区不熟悉,于是跟着百度地图或者
跟着学长走。因为是办事情,所以一般也就是局部走走,比如在学院办公楼里面走走。等到大三刚来到玉泉,会发现,即使是自己
以前来过几次,也觉得这个校区完全陌生,甚至以前来过的地方,也显得格外生疏。但是当我们真正在玉泉校区开始学习生活了,
每天从寝室走到教室大多就是一条路,教超就是另一条路,这两条主要的路走几遍之后,有时候顺路去旁边的小路看看,于是慢慢
也熟悉了这个新的校区。
源代码的阅读又何尝不是这样呢,如果没有一条主要的路线,总是局部看看,浅尝辄止不说,还不容易把握整体的结构。各模块之间
的依赖也容易理不清。如果有一条比较主干的线路,去读源代码,整体结构和思路也会变得明晰起来。当然我也是持这种看法:博客、
文章的作者,写文章的思路作者自己是清楚的,读者却不一定能看得到;而且大家写东西都难免会有疏漏。看别人写的源码分析指引
等等,用一种比较极端的话来说,是一种自我满足,觉得自己很快学到了很多源码级别的知识,但是其实想想,学习乎,更重要的是
学习能力的锻炼,通过源码的学习,学习过程中自己结合自己情况的思考,甚至结合社会哲学的思考,以及读源码之后带来的收益,
自己在平时使用框架、库的时候,出了问题的解决思路,翻阅别人源码来找到bug的能力。如果只是单单看别人写的源码分析,与写
代码的时候只去抄抄现成的代码,某种程度上是有一定相似性的。
我自己是使用Go为主的,之前对于一流的nginx中间件也没有太多了解,也是第一次去看,水平不足之处,还望海涵。回归正题,
Nginx的源代码分析,也是要找一条主要的路线,对于很多程序来说,启动过程就是一条很不错的路线,找找nginx的入口函数main
,发现在/src/core/nginx.c中,代码大概如下:
int ngx_cdecl main(int argc, char *const *argv) {
... // 先是一些变量声明
ngx_debug_init();
...
ngx_pid = ngx_getpid();
...
init_cycle.pool = ngx_create_pool(1024, log);
...
cycle = ngx_init_cycle(init_cycle);
...
if (ngx_signal) {
return ngx_signal_process(cycle, ngx_signal);
}
...
if (ngx_create_pidfile(ccf-pid, cycle-log) != NGX_OK) {
return 1;
}
...
if (ngx_process == NGX_PROCESS_SINGLE) {
ngx_single_process_cycle(cycle);
} else {
ngx_master_process_cycle(cycle);
}
return 0
}
这段代码大致看上去,先是做了一些初始化的事情,包括pool看起来应该是内存池之类的变量的分配,获取系统信息,
初始化日志系统等等,因为还没有进入相应函数去仔细看,所以先放着。用过nginx的同学应该了解,nginx命令行
运行./nginx后,他直接就运行服务了,很静默,然后即使用Ctrl+C也关不掉。但是再开一个console,运行
./nginx -h就会看到:
nginx version: nginx/1.11.7
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and confi
您可能关注的文档
- LTE基本概念的及体系结构.pptx
- LTE-基的础知识全解.ppt
- LTE基本原理的和系统架构.ppt
- Linu的x虚拟内存管理进阶4.pdf
- LTE的系统消息.ppt
- LTE大话务冲击应对的措施.ppt
- LTE规划参数方案及的讲解.pptx
- LTI的CMS加气站IC卡管理系统使用说明书.pdf
- LTE网络中的CSFB语音与短信解决方案.pptx
- lucene的的应用.pdf
- 河北盐山中学等校2025-2026学年上学期高三一模化学试卷(含解析).docx
- 河北正定中学2025-2026学年高一上学期期末考试物理试卷(含解析).docx
- 河北张家口市怀安县2025-2026学年第一学期期末教学综合评价八年级地理试卷(含解析).docx
- 河南安阳市殷都区2025-2026学年第一学期期末教学质量检测七年级地理试卷(含解析).docx
- 河南安阳市滑县2025一2026学年第一学期期末学业质量监测八年级地理试题(含解析).docx
- 河南安阳市林州市2025-2026学年上学期期末考试高一政治试题(含解析).docx
- 河南焦作市武陟县第一中学2025-2026学年高一上学期1月月考语文试卷(含解析).docx
- 河南济源市2025-2026学年上学期期末学业质量调研七年级历史试卷(含解析).docx
- PICC导管并发症的紧急处理与护理.pptx
- 河南鹤壁市2025-2026学年高二上学期期末考试生物试题(含解析).docx
最近下载
- 行政法与行政诉讼法期末考试试题及答案.pdf VIP
- 2026年抚州职业技术学院单招职业适应性测试题库含答案详解.docx VIP
- DnD_5E_新手套组_基础入门规则CN.pptx VIP
- 六年级道德与法治下册3《学会反思》.ppt VIP
- 2025年演出经纪人演出票务销售数据统计与透视表分析专题试卷及解析.pdf VIP
- 初级安检证试题及答案.pdf VIP
- 2026年抚州职业技术学院单招《数学》模拟试题【有一套】附答案详解.docx VIP
- 2024年计算机等级考试一级计算机基础及WPS Office应用试卷及解答参考.pdf VIP
- T_TFZX 59-2025 医疗机构医德医风考评指标体系指南.pdf VIP
- 遗传药理学大题库及答案.doc VIP
原创力文档

文档评论(0)