memcached入口函数(main)解析
memcached入口函数(main)解析
有理想的猪 发表于3年前
memcached入口函数(main)解析
  • 发表于 3年前
  • 阅读 86
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 前些日子看到推荐C程序员必读开源软件列表,闲来无事读一读memcached

其实代码阅读没啥特别的,别人都写好了,如果注释又比较齐全,写代码分析文档有点脱裤子放屁的意思。

memcached网络部分依赖 libevent 实现,阅读之前最好读一读 libevent 文档,不然很多代码不好理解。
官网:http://libevent.org/
文档:2.0.x-stable

官网:http://libevent.org/
文档:2.0.x-stable

书籍:Programming with Libevent(可以生成为pdf,我只做了一份:百度网盘下载

1、设置信号处理函数:signal(SIGINT, sig_handler)
    man signal
可以告诉你更多

2、设置参数默认值:settings_init()
    随后会被命令行指定值覆盖

3、随后是命令行选项分析,这个可以说是开源软件的标准,一开始都是这段,用的是getopt。有通用库的支持,写参数分析代码省时省力。
WIKI:http://en.wikipedia.org/wiki/Getopt(可以看到它支持很多主流语言和脚本)
文档:http://www.gnu.org/software/libc/manual/html_node/Getopt.html

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)


顺便推荐几本书,身为程序员又没有读过,建议一看,俗话说艺不压身:
《什么是数学
《支撑处理器的技术:永无止境地追求速度的世界》
《Operating System Concepts(操作系统概念)》
《计算机网络》
《O'Reilly精品图书系列·算法精解:C语言描述》
一时想不起更多,有机会再添加。

如果想继续在这个行业做下去,就要不断提高自己。话说回来,哪个行业不需要不断提高自己呢?除非你想一直呆在食物链最低端。

标签: memcached
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 134
博文 86
码字总数 29655
×
有理想的猪
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: