文档章节

memcached入口函数(main)解析

有理想的猪
 有理想的猪
发布于 2014/11/07 11:20
字数 696
阅读 87
收藏 0

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

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语言描述》
一时想不起更多,有机会再添加。

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

© 著作权归作者所有

共有 人打赏支持
有理想的猪
粉丝 135
博文 86
码字总数 29655
作品 0
红挢
高级程序员
【原创】memcached 中的命令行参数解析

本文主要是以 memcached 源码为例,讲解如何在 linux 下解析命令行参数。 安装 memcached 后,查看其可用选项: [root@Betty ~]# memcached -hmemcached 1.4.14-p <num> TCP port number to ...

摩云飞
2013/04/02
0
0
使用java传参调用exe并且获取程序进度和返回结果的一种方法

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在某个项目中需要考虑使用java后台调用由C#编写的切图程序(exe),并且前端能够获...

李晓晖
2016/05/24
0
0
java中main函数解析

从写java至今,写的最多的可能就是主函数 public static void main(String[] args) {} 但是以前一直都没有问自己,为什么要这么写,因为在c语言中就没有这样子的要求。其实这是一个不需要解释...

嗯哼9925
2017/12/22
0
0
twemproxy源码解析---特性及启动流程

一、Twemproxy概述及其特性 Twemproxy是一个由twitter开源的memcache与redis的代理,全部由C语言实现。作为一个代理,它的主要特性包括: 1:可以减少到后端cache服务器的连接。 2:在多个c...

语行
2013/06/27
0
0
libdvbpsi源码分析(二)main函数

从demon的dvbinfo.c中的main函数入口分析: 为了分析方便,此处将宏HAVESYSSOCKET_H隔离的socket代码去掉,只关注libdvbpsi本身的实现。 1.数据结构的设计: 1.1、捕获器capture的数据结构设...

地狱的烈火
2013/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
4分钟前
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
38分钟前
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
0
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
2
0
设计模式之五 责任链模式(Chain of Responsibility)

一. 场景 相信我们都有过这样的经历; 我们去职能部门办理一个事情,先去了A部门,到了地方被告知这件事情由B部门处理; 当我们到了B部门的时候,又被告知这件事情已经移交给了C部门处理; ...

JackieRiver
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部