目录
事件循环的意义
Redis本身是一个事件驱动的程序,事件循环模块的稳定性和吞吐量其实在某种程度上决定了Redis响应各种请求的速度。事件循环模块非常精良的设计和实现也是Redis能用单线程(到6.0版本之前)抗住各种业务场景中的大并发请求的原因之一。甚至在某种程度上可以算是最重要的原因。考虑所有的CURD请求和定时任务均需要经过该模块进行分发处理
事件循环的静态结构
如图所示,事件循环模块的静态结构如上。北向API给其他模块(内部模块或外部触发的事件)提供CUD接口,分别针对文件事件和时间事件进行操作。时间事件直接通过一个链表进行事件的管理,文件事件则是通过抽象工厂模式,由四个模块提供一个aeApiPoll函数,然后通过一段宏定义的判断选择调用哪个。
#ifdef HAVE_EVPORT
#include "ae_evport.c"
#else
#ifdef HAVE_EPOLL
#include "ae_epoll.c"
#else
#ifdef HAVE_KQUEUE
#include "ae_kqueue.c"
#else
#include "ae_sele