Nginx源码分析1
来源:互联网 发布:张大奕的淘宝店叫啥 编辑:程序博客网 时间:2024/04/30 20:56
http://blog.csdn.net/liuhongxiangm/article/details/7978132
nginx是一个开源的高性能web服务器系统,事件驱动的请求处理方式和极其苛刻的资源使用方式,使得nginx成为名副其实的高性能服务器。nginx的源码质量也相当高,作者“家酿”了许多代码,自造了不少轮子,诸如内存池、缓冲区、字符串、链表、红黑树等经典数据结构,事件驱动模型,http解析,各种子处理模块,甚至是自动编译脚本都是作者根据自己的理解写出来的,也正因为这样,才使得nginx比其他的web服务器更加高效。
nginx的代码相当精巧和紧凑,虽然全部代码仅有10万行,但功能毫不逊色于几十万行的apache。不过各个部分之间耦合的比较厉害,很难把其中某个部分的实现拆出来使用。对于这样一个中大型的复杂系统源码进行分析,是有一定的难度的,刚开始也很难找到下手的入口,所以做这样的事情就必须首先明确目标和计划。
最初决定做这件事情是为了给自己一些挑战,让生活更有意思。但看了几天之后,觉得这件事情不该这么简单看待,这里面有太多吸引人的东西了,值得有计划的系统学习和分析。首先这个系统中几乎涵盖了实现高性能服务器的各种必杀技,epoll、kqueue、master-workers、pool、buffer... ...,也涵盖了很多web服务开发方面的技术,ssi、ssl、proxy、gzip、regex、load balancing、reconfiguration、hot code swapping... ...,还有一些常用的精巧的数据结构实现,所有的东西很主流;其次是一流的代码组织结构和干净简洁的代码风格,尤其是整个系统的命名恰到好处,可读性相当高,很kiss,这种风格值得学习和模仿;第三是通过阅读源码可以感受到作者严谨的作风和卓越的能力,可以给自己增加动力,树立榜样的力量。
另一方面,要达到这些目标难度很高,必须要制定详细的计划和采取一定有效的方法。
对于这么大的一个系统,想一口气知晓全部的细节是不可能的,并且nginx各个部分的实现之间关系紧密, 不可能做到窥一斑而知全身,合适的做法似乎应该是从main开始,先了解nginx的启动过程的顺序,然后进行问题分解,再逐个重点分析每一个重要的部分。
对每个理解的关键部分进行详细的记录和整理也是很重要的,这也是这个源码分析日志系列所要完成的任务。
为了更深刻的理解代码实现的关键,修改代码和写一些测试用例是不可避免的,这就需要搭建一个方便调试的环境,这也比较容易,因为使用的linux系统本身就是一个天然的开发调试环境。
个人的能力是有限的,幸运的是互联网上还有一帮同好也在孜孜不倦的做着同样的事情,与他们的交流会帮助少走一些弯路,也会互相促进,更深入和准确的理解源码的本实。
0 0
- Nginx源码分析1
- nginx源码分析笔记1
- nginx源码分析(1)- 缘起
- nginx源码分析(1):hash的使用
- nginx源码分析(1)- 缘起
- nginx源码分析(1)- 缘起
- nginx源码分析6-模块化(1)
- nginx 源码分析 1 - 配置解析
- [nginx源码分析]配置解析1
- nginx源码分析(1)- 缘起
- nginx机制-从源码分析(1)
- nginx源码分析
- Nginx源码分析-数组
- nginx源码分析-链表
- Nginx源码分析链接
- 关于nginx源码分析
- nginx源码分析
- nginx源码分析-链表
- 9月24日
- @InitBinder
- 黑马入学_学习blog_第六篇
- Linux的进程/线程间通信方式总结
- hdu 5023 A Corrupt Mayor's Performance Art (线段树+区间更新+状压)
- Nginx源码分析1
- 排序方法
- 【设计模式】使用设计模式来解决设计问题
- org.apache.commons.beanutils.ConversionException: No value specified for 'Date'
- Android基于SOAP标准调用Webservice实现数据交互
- POJ 1742多重背包问题
- 异常处理的最佳实践
- jsp根据数据生成txt下载
- solaris 中类似于Linux shell编程中的追加文本sed语句