Redis的单线程模型的解读(为什么单线程效率高)
如图:
- 首先客户端发送连接请求
- 触发了AE_READABLE事件,并且被IO复用程序所捕获
- 然后将捕获到得所有请求都放入一个队列,由文件事件处理器统一调度
- 再连接应答处理器处理连接请求的时候,首先创建了Socket连接形成连接,然后将AE_READABLE事件绑定给命令请求处理器。
- 连接建立后,客户端开始发送请求事件,触发AE_WRITEABLE事件,同样由IO复用程序所捕获,进入队列,再由文件事件处理器统一调度
- 将请求事件分发给命令处理器,首先在内存中执行写操作,然后将AE_WRITEABLE事件绑定给命令回复处理器。
- 然后命令回复处理器回复结果。
总结
Redis为什么是单线程的?
因为文件事件处理器是单线程的,所以Redis是单线程
Redis是单线程 为什么速度还快?
是因为IO复用程序只是接受请求
并不进行业务处理(费时间的都是业务逻辑处理)
真正的进行业务逻辑处理的是在 命令请求处理器 是位于 内存的
基于内存处理业务逻辑
这就是为什么Redis是单线程的 但是一样支持高并发
单线程的设计 有效避免了 多线程在进行线切换的时候的上下文的消耗