redis为什么选择单线程工作模型

1、先说一下为什么出现进程,线程

进程:在计算机发明之初就发现,在输入数据时(I/O速度慢),CPU是空闲的,这样就浪费了CPU资源,为了充分利用CPU资源,发明了进程,在输入程序A的数据时,程序B在占用CPU资源进行计算。

线程:为了减少进程的上下文切换的损耗,满足人机交互的实时性,同时保留进程充分利用CPU资源的优点,出现了线程。

2,redis为什么不用多线程(不划算呗)

(1)纯内存操作;

(2)多线程仍然会有上下文切换的损耗,虽然比进程切换损耗小;

(3)采用了非阻塞I/O多路复用机制

题外话:我们现在要仔细的说一说I/O多路复用机制,因为这个说法实在是太通俗了,通俗到一般人都不懂是什么意思。博主打一个比方:小曲在S城开了一家快递店,负责同城快送服务。小曲因为资金限制,雇佣了一批快递员,然后小曲发现资金不够了,只够买一辆车送快递。

经营方式一
客户每送来一份快递,小曲就让一个快递员盯着,然后快递员开车去送快递。慢慢的小曲就发现了这种经营方式存在下述问题

  • 几十个快递员基本上时间都花在了抢车上了,大部分快递员都处在闲置状态,谁抢到了车,谁就能去送快递
  • 随着快递的增多,快递员也越来越多,小曲发现快递店里越来越挤,没办法雇佣新的快递员了
  • 快递员之间的协调很花时间

综合上述缺点,小曲痛定思痛,提出了下面的经营方式

经营方式二
小曲只雇佣一个快递员。然后呢,客户送来的快递,小曲按送达地点标注好,然后依次放在一个地方。最后,那个快递员依次的去取快递,一次拿一个,然后开着车去送快递,送好了就回来拿下一个快递。

对比
上述两种经营方式对比,是不是明显觉得第二种,效率更高,更好呢。在上述比喻中:

  • 每个快递员------------------>每个线程
  • 每个快递-------------------->每个socket(I/O流)
  • 快递的送达地点-------------->socket的不同状态
  • 客户送快递请求-------------->来自客户端的请求
  • 小曲的经营方式-------------->服务端运行的代码
  • 一辆车---------------------->CPU的核数

于是我们有如下结论
1、经营方式一就是传统的并发模型,每个I/O流(快递)都有一个新的线程(快递员)管理。
2、经营方式二就是I/O多路复用。只有单个线程(一个快递员),通过跟踪每个I/O流的状态(每个快递的送达地点),来管理多个I/O流。

下面类比到真实的redis线程模型,如图所示

 

 

参照上图,简单来说,就是。我们的redis-client在操作的时候,会产生具有不同事件类型的socket。在服务端,有一段I/0多路复用程序,将其置入队列之中。然后,文件事件分派器,依次去队列中取,转发到不同的事件处理器中。
需要说明的是,这个I/O多路复用机制,redis还提供了select、epoll、evport、kqueue等多路复用函数库,大家可以自行去了解。

 

这通俗易懂的例子来自:https://www.cnblogs.com/rjzheng/p/9096228.html

推荐相关阅读:http://www.cnblogs.com/huxiao-tee/p/4657851.html

 

转载于:https://www.cnblogs.com/xdyixia/p/9110116.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​​《自然》2020年十大科学发现出炉:病毒,冷冻电镜与快速射电暴

来源:科研圈作者:陈梦圆、谢一璇、李姗珊、邱燕宁、魏潇科学成就

命令行设置dns_dos命令netsh图文教程,设置修改IP地址子网掩码网关命令行改dns...

大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频。今天我们学习dos命令中的netsh,这个命令是网络命令,它有很多的功能,今天我们用它…

第三代人工智能基础设施背后,是一次技术应用的常识普及运动

来源:脑极体买了新电脑和手机,你会提前安装好杀毒或安全软件,还是等被黑客攻破了才悔之晚矣?处理传染病疫情,是从源头释放药物和疫苗,还是坐等医院的患者超过治疗和处理能力?面对危机舆情&#…

5 ui自适应窗口_Qt编写地图综合应用5-自适应拉伸

一、前言用过echart的人都会遇到一个问题,就算是代码中写了window.onresize echart.resize,也只是横向自适应拉伸填充页面,垂直方向不会变化,除非指定高度才可以,这就比较郁闷了,为何echart本身不会自适应…

为什么俄罗斯的数学那么牛?

编辑 ∑Gemini来源:奇趣数学苑但在国际上也有一个很著名的说法,就是世界上最好的大学,其实是“美国的学校,中国的学生,俄罗斯的教授”。俄罗斯数学家佩雷尔曼虽然俄罗斯现在相比以前来说,尤其明显的是在一些需要大量设…

查看屏幕大小_疑似“iPhone 12” 的OLED屏幕组件泄露

来自可靠的泄密者的新照片显示了即将面世的“ iPhone 12”所搭载的OLED屏幕。这名泄密者以前曾显示过未来苹果产品的准确图像,此前曾展示过苹果A14芯片组的早期图片,并声称“ iPhone 12”将配备20W电源适配器。现在他在推特上发布了一张照片,…

搭建Hexo博客(一)-创建Hexo环境

Hexo配合github,可以创建自己的博客。基本原理是使用Hexo生成静态页面,发布到github上。在本地需要搭建Hexo环境。 1、安装nodejs 下载并安装NodeJS,官网地址:https://nodejs.org/en/ 2、安装完后,查看安装情况 1 node…

Nature:2020年最佳科学影像,每一张都是壁纸,每一张都是历史

文章来源:学术头条2020年是独一无二的一年。COVID-19大流行将科学推到了最前沿,并深刻影响了人们的生活。但是这一年也产生了许多与病毒无关的新影像。从薄薄的太阳能电池,到经过基因编辑的鱿鱼,下面就是Nature新闻和艺术团队评选…

转 从红帽、GitHub和Docker看开源商业模式的进阶

从红帽、GitHub和Docker看开源商业模式的进阶 发表于2014-12-16 10:26| 7594次阅读| 来源http://stratechery.com/| 0 条评论| 作者Ben ThompsonDocker红帽GitHub开源CoreOS摘要:从技术角度来说,Docker无疑是可圈可点的,比如“write once run…

antimalware可以关闭吗_iPhone最好关闭这4个设置,手机流畅还省电

你抢到新款的iPhone12了吗?80%的小伙伴都会忽略的设置,你的iPhone手机最好关闭以下这4个设置。①关闭ios系统更新操作步骤:打开【设置】-【通用】-【软件更新】-【自动更新】-【下载iOS更新】,关闭即可。这样就不会莫名其妙地下载…

MVVM Light Toolkit使用指南

原文地址: https://blog.csdn.net/ldld1717/article/details/77040077概述MVVM Light Toolkit是一个Android MVVM 轻量级工具库,主要目的是更快捷方便的构建Android MVVM应用程序,工具库添加了一些Data Binding 不支持的属性,还有…

段永朝:界面——之内、之外与之间

来源:苇草智酷01画一个圈儿,就把平面分成圈内,圈外。这个圈儿,就成了界面。垒一道墙,就把空间分成墙里,墙外。这个墙,就成了界面。看一眼手机上的钟表,那一刻闪现的数字,…

mysql面试考点_mysql面试知识点

1 引擎-MyISAM和InnoDB的区别a 是否支持行级锁 :MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。b 是否支持事务和崩溃后的安全恢复:MyISAM 强调的是性能,每次查询具有原子性,其执行…

jquery 快速入门二

---恢复内容开始--- 操作标签 样式操作 样式类 addClass();//添加指定的CSS类名。 removeClass();//移除指定的类名. hasClass();//判断样式不存在 toggleClass();//切换css类名,如果有就移除,如果没有就添加 示例:开关灯和模态框 CSS css(&q…

中国工程院《全球工程前沿2020》报告在京发布

来源:科学网作者:李晨阳12月18日上午,中国工程院《全球工程前沿2020》报告在京发布。报告围绕机械与运载工程、信息与电子工程、化工冶金与材料工程、能源与矿业工程、土木水利与建筑工程、环境与轻纺工程、农业、医药卫生、工程管理9个领域&…

AlphaFold证明人工智能可以解决基本的科学问题

来源:IEEE电气电子工程师Gif: DeepMindTwo examples of protein targets in the free modelling category.任何人工智能的成功实施都依赖于以正确的方式提出正确的问题。这就是英国人工智能公司DeepMind(Alphabet的子公司)在利用其神经网络解…

Java中文件的创建

File filenew File(“text.txt”) 运行这行代码,我们会发现相应的文件夹下无法找到创建的text.txt 首先 File 类是对文件系统的映射 并不是硬盘上真实的文件 所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会…

计算的极限(零):逻辑与图灵机

来源: 数学职业家提出问题和解决问题的人2012,图灵诞辰100周年,献给这位伟大的开拓者。计算无处不在。走进一个机房,在服务器排成的一道道墙之间,听着风扇的鼓噪,似乎能嗅出0和1在CPU和内存之间不间断的流动…

java修改list中对象的值_Java中List集合的一点总结

为什么要用接口引用指向实现类的对象?这种写法其实java多态的表现形式多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用List list;是在栈区开辟一个空间…

Science公布年度十大科学突破!新冠疫苗居首位

来源 : 新华社编辑:宗华排版:郭刚美国《科学》杂志17日公布其评选的2020年十大科学突破,“以创纪录的速度开发和测试急需的新冠疫苗”当选头号突破。中国、美国、欧洲等地科研人员在2020年年初获得新冠病毒基因组序列后&#xff0…