最近想研究一下memcached实现,主要目的是熟悉和学习Linux C的开发,这个对android native开发和服务端的开发都是相通的,下面只是简单的看了下memcached.h和memcached.c main入口函数的源码,先把大概的理解记录一下,还有很多细节没有深入了解,慢慢来把。整个过程看的还是比较吃力的,对libc的库函数很不了解。
memcached版本1.4.9
Memcached.h
主要定义了memcached主要的数据结构和方法。
比如几个主要的结构定义:
1. memcached链接conn
2. memcached存储结构_stritem
3. memcached的设置结构settings
4. 全局状态stats
5. 。。。。。。
Memcached.c main函数代码阅读
main函数基本流程:
1. 判断libevent版本,需要大于1.3
2. 截获SIGINT信号的处理(这个为什么截获,还没有深入了解)
3. 初始化settings结构的一些信息,主要是memcached运行时的一些参数
4. 初始化udp处理线程数
5. 初始化sasl处理协议(对sasl不太了解)
6. 设置tcp和udp的端口
7. core文件的访问的设置
8. 检查和设置打开文件的数目
9. 用户权限的判断,禁止用root权限运行
10. 如果支持sasl验证,进行响应初始化
11. 守护进程处理,忽略SIGHUP信号的处理(守护进程不处理SIGHUP?这个在确认一下)
12. 处理内存翻页,锁定进程内存翻页到交换区(mlockall)
这个是为了什么?禁止翻页是不是优化访问速度?
13. 初始化libevent主线程
14. 初始化一些全局状态(stats_init)
15. 初始化chunk(slabs_init)??
打问号,需要继续看代码
16. 初始化连接池conn_init
17. 忽略SIGPIPE信号,避免因为访问关闭管道导致进程退出
18. 初始化工作线程(thread_init)
19. 创建assoc 维护线程? assoc还没高明白
20. 初始化时序clock_handler,这个还不太明白
21. socket初始化(需要继续看代码细化过程)
22. 保存进程文件save_pid
23. 开始事件循环event_base_loop
24. 一些资源清理