阅读Redis源码

1. AE事件驱动框架

1.1 polling处理

ae_epoll.c、 ae_kqueue.c、 ae_evport.c、 ae_select.c 这4个文件的功能是完全一样的,提供一致的API接口,给ae.c文件调用

1.2 核心结构体

aeEventLoop 用来创建事件循环

  • aeCreateEventLoop:初始化一个事件循环结构体(eventLoop)
  • aeSetBeforeSleepProc:注册回调函数,即每次主循环在休眠之前被调
  • aeStop:停止事件循环,即stop值设为1
  • aeMain启动事件循环,事件循环的入口
  • aeProcessEvents:事件处理逻辑
  • aeDeleteEventLoop删除事件循环eventLoop(释放内存空间)

其中关键是aeProcessEvents逻辑,设计仅需要支持两种事件:文件IO事件(统一了网络socket和文件读写)和定时事件。使用polling机制保证尽量在一次处理过程中,将时间事件和文件事件一次性处理。注意:这个逻辑因为是单线程的,所以简化了很多。

打赏作者
提交看法

抢沙发

还没有评论,你可以来抢沙发