文档章节

memcached入口函数(main)解析

有理想的猪
 有理想的猪
发布于 2014/11/07 11:20
字数 696
阅读 89
收藏 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语言描述》
一时想不起更多,有机会再添加。

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

© 著作权归作者所有

共有 人打赏支持
有理想的猪
粉丝 136
博文 87
码字总数 30090
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

打包QML程序

1、windeployqt执行路径(D:\Qt\5.12.0\msvc2017_64\bin)加入到PATH中 2、使用Qt自带的命令行交互 Command 终端(Qt 5.12.0 64-bit for Desktop (MSVC 2017))切换到 Release 编译成功的exe...

渣渣曦
37分钟前
3
0
优秀互联网高级测试工程师应该具备的能力

概述 在之前写的互联网高级测试工程师至少具备的能力一文中,提到了测试工程师至少具备的能力,但是并没有提到优秀测试工程师应该具备的能力,下文简单的谈一谈。当然这些全部都是我的个人理...

Sam哥哥聊技术
41分钟前
3
0
webpack项目配置

前端工程化 前端工程化是根据业务特点,将前端开发流程规范化,标准化,它包括了开发流程、技术选型、代码规范、构建发布等等,用语提升前端工程师的开发效率和代码质量。 自动化构建工具 1、...

羊皮卷
43分钟前
1
0
Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令

jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的...

开元中国2015
今天
3
0
springboot Whitelabel Error Page(Not Found)解决方案

当出现上图图的错误时注意 报错信息 There was an unexpected error (type=Not Found, status=404). Not Found代表未访问到资源 解决方案:比较访问路径和代码的路径有没有写错 正确的访问路...

斩神魂
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部