🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
`Redis`服务器是一个事件驱动程序,服务器需要处理两类事件:文件事件和时间事件。 * 文件事件:`Redis`服务器和客户端(或其它服务器)进行通信会产生相应的文件事件,然后服务器通过监听并处理这些事件来完成一系列的通信操作。 * 时间事件:`Redis`内部的一些在给定时间之内需要进行的操作。 `Redis`的文件事件处理器以单线程的方式运行,其内部使用了`I/O`多路复用程序来同时监听多个套接字(`Socket`)连接,提升了性能的同时又保持了内部单线程设计的简单性。下图就是文件事件处理器的示意图: ![](https://img.kancloud.cn/30/5a/305ac994c57c6ae368d19e616f532903_803x300.png) `I/O`多路复用程序虽然会同时监听多个`Socket`连接,但是其会将监听的`Socket`都放到一个队列里面,然后通过这个队列有序的、同步的将每个`Socket`对应的事件传送给文件事件分派器,再由文件事件分派器分派给对应的事件处理器进行处理,只有当一个`Socket`所对应的事件被处理完毕之后,`I/O`多路复用程序才会继续向文件事件分派器传送下一个`Socket`所对应的事件,这也可以验证上面的结论,处理客户端的命令请求是单线程的方式逐个处理,但是事件处理器内并不是只有一个线程。