其实代码阅读没啥特别的,别人都写好了,如果注释又比较齐全,写代码分析文档有点脱裤子放屁的意思。
memcached网络部分依赖 libevent 实现,阅读之前最好读一读 libevent 文档,不然很多代码不好理解。
官网: 文档: 官网: 文档:书籍:(可以生成为pdf,我只做了一份:)
1、设置信号处理函数:signal(SIGINT, sig_handler)
man signal可以告诉你更多2、设置参数默认值:settings_init()
随后会被命令行指定值覆盖3、随后是命令行选项分析,这个可以说是开源软件的标准,一开始都是这段,用的是getopt。有通用库的支持,写参数分析代码省时省力。
WIKI:(可以看到它支持很多主流语言和脚本) 文档:4、设置哈希函数 hash_init
hash.h有函数指针定义:typedef uint32_t (*hash_func)(const void *key, size_t length)5、再后边根据参数设置其他参数的值
6、设置操作系统资源上限(resource limits)
man getrlimit、man setrlimit可以查看更多细节7、检查用户,禁止以root启动,指定用户是否存在
8、默认不启用SASL认证
9、是否守护进程模式,对我们的阅读没有影响,可以简单看看,退出主进程、输出转向
10、mlockall函数将进程虚内存地址锁定至RAM,防止页交换,默认不锁
11、初始化libevent,此函数在libevent2.0已经被 event_base_new代替,memchched尚未应对这个改动
12、分配并初始化各部分内存空间
13、初始化互斥(mutex)锁,初始化线程用的libevent管道描述符(一收一发),每线程有自己独立的event_base,创建监听receive FD的事件,创建并启动事件处理线程开始监听
14、创建Unix Socket或者TCP、UDP监听,并开始等待事件(server_socket_unix、server_sockets、event_base_loop)
顺便推荐几本书,身为程序员又没有读过,建议一看,俗话说艺不压身:
一时想不起更多,有机会再添加。如果想继续在这个行业做下去,就要不断提高自己。话说回来,哪个行业不需要不断提高自己呢?除非你想一直呆在食物链最低端。