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

IO多路复用优先级