nginx源码分析(19)-方法(3)

来源:互联网 发布:淘宝刷单加权重方法 编辑:程序博客网 时间:2024/05/15 04:37
 
nginx的三个部分:核心、事件模型/并发模型、应用模块,之前已经详细了分析了核心和事件模型/并发模型两个部分,也详细解释了nginx的模块化设计。

之前的分析采用了平铺直叙的方式,对源码中主要函数进行了流程化的分解和剖析,经过这种分析方式,对nginx的认识越来越全面和深入,相关的领域知识和背景知识也越来越丰富。但是这种分析方法比较直白,分析不够深入和透彻,缺少总结和对比,只是阐述如何做,没有阐述为什么那样做,有没有更好的方式等等更深入的话题。

接下来先不去分析http和mail应用模块。把核心和事件模型部分的分析结果整理一下,分解出一些关键和重要的专题进行论述,专题不会大而全,尽量透彻和深入,例如,可以针对nginx的内存相关的使用和管理组织成一个专题。

专题需要一些参照知识,选择了《unix环境高级编程》、《unix网络编程》和部分RFC文档作为主要资料,nginx的相关背景知识也可以从这些资料中获取。

最近手头有一些后台项目需要升级和优化,nginx的一些基础设施可以抽取出来加入到这些项目实现中,这些基础设施包括内存池、缓冲区和基本的数据结构。nginx的这些基础设施有良好的设计和清晰干净的接口,相比于其他的源码,这个部分是最容易抽取出来的。毋庸置疑的是,这些基础设施是nginx高效的一个根本,不过这并不表示放到任何项目中都是高效的,不同的项目有不同的特点,关键是理解这些设计背后的权衡,在恰当的地方运用恰当的技术方案。

nginx的基础设施实现手法成熟,不仅接口设计的清晰干净,而且有极好的扩展性,很容易运用到其他项目中,难能可贵的是,这种优良的接口风格可以避免很多犯错的可能,例如内存池的接口设计,开发人员很少需要关注内存的释放,只在确定不使用的时候调用destroy接口一次性释放内存池的所有内存资源,其余场合可以利用alloc分配任意大小的内存,可以reset内存池避免重新分配和初始化,如果想减少内存碎片,可以在内存池之上实现自己的slab预分配策略,扩展性很好。

nginx是非常少见的在功能和质量之间取得很好平衡的高性能服务器实现,可谓全身皆宝,值得花更长的时间钻研和探讨。
原创粉丝点击