memcached启动过程2(改用自己的语言来叙述)

设置系统的RLIMIT_CORE当前值和最大值都为无限大


然后设置系统RLIMIT_NOFILE(系统内每个进程能打开的文件数)为全局结构体settings.maxconns


j接着是如果用户位root,则必须使用参数-u root,否则会打印输出,然后退出

取得登录用户的信息,根据此信息来设置组id和用户id



如果系统支持sasl则初始化


如果系统是在deamon情况下运行,则对SIGHUP信号的处理是忽略,调用daemon(调用fork生成子进程,父进程退出,然后设置子进程为进程组首进程,切换到根目录,把输入出处,错误输出都指向/dev/null) 


如果设定了参数-k,则调用mlockall将当前进程所使用的所有的内存空间锁在物理内存中,防止被操作系统交换到swap分区(操作系统把一些不活跃的进程转移到swap分区,(就是使用硬盘来作为虚拟内存);


调用libevent库函数event_init()来初始化事件


调用stats_init初始化全局结构体stats(在memcached客户端使用此命令可以输出此结构体的很多成员变量的值)


assoc_init 初始化primary_hashtable(从堆内分配65536个void*指针)


设置SIGPIPE信号的处理方法是忽略(写到管道时候,读进程已经终止,管道是子进程父进程直接通讯的ipc)


初始化线程(memcached采用多线程的方法处理客户连接,如果采用多进程,并且封装epoll的不适用libevent库,因为如果仅仅编一个软件使用一个库,浪费很大)根据settings.num_threads数目来创建线程数)第二个参数是struct event_base指针



调用clock_handler处理一下evtimer的事情


根据settings. socketpath创建管道,

保存当前进程id并保存为文件

然后一个event_base_loop(调用event_init的返回值,中间被线程初始化也掉用过一次)等待事件被触发,然后调用事件 的处理函数,此函数会一直运行,知道没有可以添加的函数,或者直到调用了event_base_loopbreak()或者evenet_base_loopexit()




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值