虚拟主机域名注册-常见问题 → 服务器知识 → 服务器问题

Redis线程模型

  2.1 是单线程的吗?为什么使用单线程?

  Redis到底是单线程还是多线程?

  如果仅仅聊Redis的核心业务部分(命令处理),答案是单线程

  如果是聊整个Redis,那么答案就是多线程

  在Redis版本迭代过程中,在两个重要的时间节点上引入了多线程的支持:

  Redis v4.0:引入多线程异步处理一些耗时较旧的任务,例如异步删除命令unlink

  Redis v6.0:在核心网络模型中引入 多线程,进一步提高对于多核CPU的利用率

  因此,对于Redis的核心网络模型,在Redis 6.0之前确实都是单线程。是利用epoll(Linux系统)这样的IO多路复用技术在事件循环中不断处理客户端情况。

  为什么Redis要选择单线程?

  抛开持久化不谈,Redis是纯 内存操作,执行速度非常快,它的性能瓶颈是网络延迟而不是执行速度,因此多线程并不会带来巨大的性能提升。

  多线程会导致过多的上下文切换,带来不必要的开销

  引入多线程会面临线程安全问题,必然要引入线程锁这样的安全手段,实现复杂度增高,而且性能也会大打折扣

  2.2 Redis的单线程模型-Redis单线程和多线程网络模型变更

  当我们的客户端想要去连接我们服务器,会去先到IO多路复用模型去进行排队,会有一个连接应答处理器,他会去接受读请求,然后又把读请求注册到具体模型中去,此时这些建立起来的连接,如果是客户端请求处理器去进行执行命令时,他会去把数据读取出来,然后把数据放入到client中, clinet去解析当前的命令转化为redis认识的命令,接下来就开始处理这些命令,从redis中的command中找到这些命令,然后就真正的去操作对应的数据了,当数据操作完成后,会去找到命令回复处理器,再由他将数据写出。




免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:bkook@qq.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
【 双击滚屏 】 【 推荐朋友 】 【 收藏 】 【 打印 】 【 关闭 】 【 字体:大 中 小 】 
上一篇:了解Redis网络模型
下一篇:Redis通信协议-RESP协议
  >> 相关文章
没有相关文章。