文档章节

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

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

© 著作权归作者所有

共有 人打赏支持
下一篇: Linux Cgroups
有理想的猪
粉丝 136
博文 91
码字总数 32273
作品 0
红挢
高级程序员
私信 提问
普中PZ6806开发板 STM32学习笔记2 使用寄存器点亮一个LED

版权声明:(谢厂节的博客)博主文章绝大部分非原创,转载望留链接。 https://blog.csdn.net/xundh/article/details/84349565 LED 模块电路 我们程序目的是要让PC0输出低电平。如果要闪烁,就...

谢厂节
2018/11/22
0
0
服务器高并发网络设计模型

Nginx网络模型 一、进程模型 Nginx之所以为广大码农喜爱,除了其高性能外,还有其优雅的系统架构。与Memcached的经典多线程模型相比,Nginx是经典的多进程模型。Nginx启动后以daemon的方式在...

满小茂
2016/08/28
155
0
【原创】memcached 中的命令行参数解析

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

摩云飞
2013/04/02
0
0
java中main函数解析

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

嗯哼9925
2017/12/22
0
0
使用java传参调用exe并且获取程序进度和返回结果的一种方法

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

李晓晖
2016/05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
8
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
3
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
2
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
1
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部