redis的网络模型是IO多路复用,这也是它能够单线程也很快的原因,正是因为它用了IO多路复用,所以不会产生IO阻塞问题,能够在同一时间内与多个client通信。
redis课程的老师只说了epoll,但其实redis是封装了一套接口,对于不同的操作系统用不同的处理方式。有epoll, evport, kqueue, select几种。
编译的时候用宏定义来决定编译几种。
下面的代码中,每个.c就对应着不同的IO多路复用方式。
#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_select.c"
#endif
#endif