近期学习了redis底层框架
,好多东西之前都没听说过,算是大开眼界了。
先梳理下redis正常的通讯流程吧
首先服务器启动都有主函数main,这个main函数就在redis.c里
首先是initserverconfig()
,在这里初始化了redisserver基本的配置信息,
接着调用loadServerConfig(char *filename)
对 server 全局变量重新初始化。
然后是调用daemonize()
,实现守护进程,脱离了控制台,使这个进程成为独立的首领进程
接下来是initServer()
,这个过程很重要,完成了事件驱动的注册和一些回调函数的绑定,回头仔细说这个函数里面的功能
初始化服务器过后aeSetBeforeSleepProc()
,设置了服务器休眠之前会
调用beforeSleep函数
,然后进入主要的事件轮询函数 aeMain(server.el)
,在这里完成事件的派发
最后事件轮询过后我们调用aeDeleteEventLoop
,释放之前开辟的内存,
结束进程。
中间略去一些琐碎的过程,我们总结一下
initserverconfig() ----> loadServerConfig------> daemonize()------->
initServer()-----> aeSetBeforeSleepProc()------>aeMain()----->aeDeleteEventLoop
接下来详细说一下每一个步骤都做了什么。
看一下main()函数
1 | int main(int argc, char **argv) { |
谢谢关注我的公众号: