当前位置: 首页 > news >正文

redis多路复用IO模型 以及 6.0引入的多线程模型

redis为什么选择单线程

  1. 采用多线程的话,会出现上下文切换的开销
  2. 采用多线程,会带来共享资源的竞争控制,比如多个线程同时访问同一个资源(键值)时,需要额外的手段来保障共享资源的正确性,会带来额外的开销。多线程开发会引入同步语句来保护共享资源的并发访问,会降低代码的可调试性和可维护性。

为什么redis采用单线程还能如此的快

  1. 大部分操作在内存上完成
  2. 采用了高效的数据结构,如 跳表、哈希表。
  3. 采用了多路IO复用机制,使其在网络IO的操作下,能并发的处理大量客户端的请求,实现高吞吐量。

IO多路复用指的是,Redis采用linux的Epoll机制,实现内核中同时存在多个监听中的套接字和已监听的套接字,内核会一直监听这些套接字,一但有请求到达时,就会放到事件队列中,redis的主线程会不断从事件队列中取事件去消费。
在这里插入图片描述

redis 6.0版本引入的多线程

redis在6.0版本引入了多线程,其实不仅仅实在6.0,在6.0版本之前,redis也有其他线程在工作,比如rdb文件备份。6.0之后实在IO多路复用的流程中引入了多线程。
为什么引入多线程,因为读写网络的网络调用在redis执行期间占据了大量的时间。如果把网络读写交给线程组实现,会带来很大的方便,多线程只用在网络的读写和协议解析,执行redis命令的仍然是主线程,也不会带来资源竞争等问题。
在这里插入图片描述
在这里插入图片描述

相关文章:

  • Python pandas 向excel追加数据,不覆盖之前的数据
  • 记录微信小程序掉起半屏失效问题
  • 全面解析 iTextSharp:在 .NET 中高效处理 PDF
  • 微信小程序执行C语言库的详细方案
  • 基于腾讯云MCP广场的AI自动化实践:爬取小红书热门话题
  • 数字电子技术基础(五十六)——JK触发器
  • ASP.NET Core 中实现 Markdown 渲染中间件
  • DRF+Vue项目线上部署:腾讯云+Centos7.6
  • 22、近端策略优化算法(PPO)论文笔记
  • 深入理解栈数据结构(Java实现):从原理到实战应用
  • 什么是延迟队列?RabbitMQ 如何实现延迟队列?
  • Lost connect to debugger on ‘iphone‘
  • [ctfshow web入门] web58
  • 【算法-链表】链表操作技巧:常见算法
  • 《数据结构初阶》【链式二叉树】
  • 从父类到子类:C++ 继承的奇妙旅程(1)
  • 什么是HTML、CSS 和 JavaScript?
  • 如何阅读、学习 Git 核心源代码 ?
  • 使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用(2)
  • 缓存套餐-03.功能测试
  • 正荣地产:前4个月销售14.96亿元,控股股东已获委任联合清盘人
  • 5月12日至13日北京禁飞“低慢小”航空器
  • 北京:下调个人住房公积金贷款利率
  • 数据中心业务今年预增50%,丹佛斯:中国是全球最重要的市场
  • 五一期间7名游客接连被困青海荒漠,警方提醒严禁非法穿越
  • 李云泽:对受关税影响较大、经营暂时困难的市场主体,一企一策提供精准服务