Server Client Event - wyc902/redis GitHub Wiki

Redis 的server是一个事件驱动程序,服务器处理的时间有两类

1 文件事件:server通过socket和client通信,client向server发送命令,订阅服务,心跳检测都是通过,文件事件的套接字实现的。

2 时间事件:server中的定时事件,基本都在serverCron函数里。

对文件事件的处理:

文件事件处理模块以单线程方式运行,通过i/o多路复用来处理多个套接字

i/o 多路复用程序监听多个套接字,把产生的io事件交给文件事件分派器,分派器根据具体的时间选择相应的函数处理。

多路复用程序把准备好的套接字放到一个队列里,每次一个同步的向文件分派器器传送。只有上一个套接字处理完了,才会传下一个。

多路复用程序的底层实现,封装了select, epoll, evport, kqueue这些系统调用。源码中通过include宏定义规则,编译的时候,根据系统选择合适的底层实现。