Redis的单/多线程不仅仅体现在版本上,还提现在Redis区域位置上。
简单概括:Redis7属于多线程和单线程结合
单线程
-
使用单个工作线程,保证了数据安全性,因为无需管理多线程数据不一致,同时避免了线程上下文切换,造成资源消耗
-
因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型
-
为什么使用单线程:
-
Redis在内存中工作,得益于内存的特性(快,丢失数据)所以也无需添加多线程,而造成其他方面的问题
-
之前计算机多为2/4核,多线程模式也发挥不出性能,而现在都4/8核心,高级服务器芯片甚至64+
-
多线程
-
多个IO线程协同工作来解决网络IO的瓶颈问题
-
Redis6将网络数据读写、请求协议解析通过多个IO线程的来处理 ,对于真正的命令执行来说,仍然使用单线程操作
-
为什么使用多线程:
-
Redis性能瓶颈并不在CPU,由于Redis在于内存工作,所以更多性能瓶颈是网络宽带
-
正如Mysql需要连接池一样,Redis也需要IO复用
-
什么是Reactor
-
Reactor 模式要求 主线程(I/O 处理单元) 只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作。 读写数据,接受新的连接,以及处理客户请求均在工作线程中完成。
工作线程为什么仍然是单线程
-
使用单个工作线程,保证了数据安全性,因为无需管理多线程数据不一致的情况,同时避免了线程上下文切换,造成资源消耗。并且在内存中操作,效率高
以前Redis版本所说的单线程:其实只有一个主工作线程,同步等等还是有后台线程来操作的
上面所说的区域位置:Redis工作线程是单线程的,但是,整个Redis来说,是多线程的