本人读了很多C开源服务端代码, 有自己的一些感受:
1, 代码依据的算法与原理需要先搞懂, 比如你看lighttpd/nginx/apache, 你都不知道http协议就很难看下去, 这就要求你起码做过lamp的开发, 对http/cgi/fcgi有一个应用级别的认识, 之后才能具体到代码里去探究实现.
2, 先把程序用熟练, 各种命令行参数都用一用, 程序的配置文件大致知道是什么格式, 都能配置些什么参数.
3, 开始看外围代码, 比如: 网络I/O Event框架, chunk Buffer, 内存池, 数据结构(nginx rbtree), 这样一方面为将来看核心主干代码打好基础, 免得不断的回头翻, 一方面也是熟悉作者的行文风格, 而且也可以学习一下人家的代码设计风格, 主要还是因为外围代码难度小, 独立性高, 足够模块化.
4, 核心代码从main走起, 这个过程很痛苦, 因为最难的就是把整个程序逻辑串起来, 最终达成系统化的认识, 抓住框架, 忽略细节, 这是需要一点功力的. 建议放平心态, 一步一步钻, 看这部分是一定很痛苦的, 但也一定是痛苦并享受的, 每次突破一点就会很兴奋. 但开源代码一定要习惯这样一个心态, 即你不可能看到哪就看懂, 一定是拖着现在看不懂的, 往后面看新的, 一直到前后可以串联起来.
如果是身边同事的代码, 一样的道理, 先学会用程序, 搞清楚程序用了什么原理, 干了什么事, 然后再根据现象看本质(代码)就会简单很多. 同事的代码和开源代码比其实简单多了, 一方面代码量小, 一方面都是凡人, 读代码的同时会深刻的感觉到作者每一步是想干什么, 但开源代码一般比较大, 而且非常精致, 就需要费很多劲去体会作者的意图.
|