Redis单线程与多线程模型

Posted 诺浅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis单线程与多线程模型相关的知识,希望对你有一定的参考价值。

  1. Redis 5.x及以前都是单线程,6.0及以后才是多线程
  2. 不管是单线程还是多线程都是单work线程,多线程指的是IO子线程
  3. 单线程模型为单work线程,执行步骤如下
    3.1. work线程读取客户端指令
    3.2. work线程执行指令
    3.3. work线程响应客户端
  4. 多线程模型也为单work线程,但是又多个IO线程,其执行步骤如下
    4.1. work线程负责接收客户端连接,接收连接后把连接放入等待列表中。
    4.2. work线程接收到连接后把socket分配给IO线程组,IO线程组读取指令,IO线程组读取指令过程中work线程堵塞
    4.3. work线程执行这些指令(执行过程中依然是单线程)
    4.4. IO线程组响应执行结果,响应过程中work线程堵塞
    4.5. 多线程模型其执行步骤图如下

总结:可以看出来Redis多线程只是读取和响应的客户端请求的时候是多线程,实际执行过程还是单线程。之所以这么设计的原因是Redis的瓶颈往往是在网络IO和内存,而内存通过加硬件可以解决,Redis多线程模型主要解决的是网络IO瓶颈,通过多个线程来读取请求,单个线程来执行请求,即可以保证读取与响应的高性能,又可以保证执行过程中是串行化,不需要考虑锁,线程切换等复杂的逻辑,也不会由于多线程的死锁问题带来性能的降低。

参考:
https://zhuanlan.zhihu.com/p/118450227
https://www.cnblogs.com/gz666666/p/12901507.html

以上是关于Redis单线程与多线程模型的主要内容,如果未能解决你的问题,请参考以下文章

Redis Stream队列与多线程模型

Redis系列四-Redis的线程 IO 模型

单线程与多线程

对Redis 单进程单线程模型的理解(网摘)

了解redis的单线程模型工作原理?一篇文章就够了

和Redis的线程模型做个“了结”