Redis实现了自己的事件库,代码在ae.c中。想要理解Redis事件库的工作原理,最好的方法就是去理解Redis如何使用它。
事件循环初始化
redis.c中的initServer函数初始化了redisServer结构体变量的众多成员,其中一个就是Redis事件循环(event loop)el:
aeEventLoop *el
initServer调用aeCreateEventLoop(定义在ae.c)初始化server.el的成员。aeEventLoop的定义如下:
typedef struct aeEventLoop
{
int maxfd;
long long timeEventNextId;
aeFileEvent events[AE_SETSIZE]; /* 已经注册的事件 */
aeFiredEvent fired[AE_SETSIZE]; /* 已经就绪的事件 */
aeTime