Redis单线程与多线程模型
Posted 诺浅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis单线程与多线程模型相关的知识,希望对你有一定的参考价值。
- Redis 5.x及以前都是单线程,6.0及以后才是多线程
- 不管是单线程还是多线程都是单work线程,多线程指的是IO子线程
- 单线程模型为单work线程,执行步骤如下
3.1. work线程读取客户端指令
3.2. work线程执行指令
3.3. work线程响应客户端 - 多线程模型也为单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单线程与多线程模型的主要内容,如果未能解决你的问题,请参考以下文章