首先说明,为什么redis的效率这么高?
- 单线程,避免了多线程切换的开销
- 内存操作
- 基于reactor模式的非阻塞io模型
在redis中将这种基于reactor模式开发的模式称为文件事件处理器。 简单说明下reactor模式: 在Reactor中,这些被拆分的小线程或者子过程对应的是handler,每一种handler会出处理一种event。 这里会有一个全局的管理者selector,我们需要把channel注册感兴趣的事件, 那么这个selector就会不断在channel上检测是否有该类型的事件发生, 如果没有,那么主线程就会被阻塞, 否则就会调用相应的事件处理函数即handler来处理。 典型的事件有连接,读取和写入,当然我们就需要为这些事件分别提供处理器, 每一个处理器可以采用线程的方式实现。
下图可以粗略的说明redis中的线程模型:
具体流程