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

redis为什么选择单线程工作模型相关推荐

  1. Redis之单线程 Reactor 模型

    纯内存访问,所有数据都在内存中,所有的运算都是内存级别的运算,内存响应时间的时间为纳秒级别.因此 redis 进程的 cpu 基本不存在磁盘 I/O 等待时间.内存读写性能问题,CPU 不是 redi ...

  2. Redis是单线程为什么还那么快?

    Redis为什么还那么快 基于内存   Redis完全基于内存,绝大部分请求是纯粹的内存操作,Redis将数据存储在内存中,读写数据的时候不会受到硬盘I/O速度的限制(内存速度为什么比硬盘快?),类似 ...

  3. 为什么 Redis 是单线程的

    文章目录 3.6 为什么 Redis 是单线程的 3.6.1 Redis的单线程理解 3.6.2 单线程的 Redis 为何高并发快 3.6 为什么 Redis 是单线程的 参考地址:https:// ...

  4. Redis 是单线程的正确理解

    一.为什么Redis是单线程的 1️⃣官方答案 因为 Redis 是基于内存的操作,CPU不是 Redis 的瓶颈.Redis 的瓶颈最有可能是机器内存的大小或者网络带宽.既然单线程容易实现,而且 C ...

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

    1.首先redis是单线程的,为什么redis会是单线程的呢? 从redis的性能上进行考虑,单线程避免了上下文频繁切换问题,效率高: 从redis的内部结构设计原理进行考虑,redis是基于Reac ...

  6. java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part6(Redis的应用场景、Redis是单线程的速度还快、Redis线程模型:Reactor模式、事件、发布订阅、管道)~整起

    PART1-1:为什么Redis是单线程的 Redis单线程是指: Redis的网络IO和键值对读写是由一个线程来完成的.这也是 Redis 对外提供键值存储服务的主要流程.Redis的其他功能,比如 ...

  7. Redis使用单线程却快到飞起的原因

    文章目录 Redis为什么用单线程? 多线程的开销 Redis使用单线程为什么还这么快? 网络与IO操作的潜在阻塞点 基于多路复用的高性能IO模型 回调机制 Redis的性能瓶颈点 其他Redis相关 ...

  8. Redis是单线程的以及Redis为什么这么快

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是"二八定律".什么是&qu ...

  9. 为什么说Redis是单线程的以及Redis为什么这么快!

    一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是"二八定律".什么是"热数据和冷数据",复杂一点的会问到缓存雪崩.缓存穿透.缓存 ...

最新文章

  1. 驱动华为_再补齐一个短板,华为正式宣布进军屏幕驱动行业
  2. 20165328 预备作业3 Linux安装及命令
  3. 基于重力补偿的 PD 控制
  4. [OS复习]进程管理2
  5. 空投坐标怎么看6_装修时,怎么确认自己买的“瓷砖”是优等品?看“6点”很重要...
  6. 第四章 第四节 per_cpu
  7. kotlin 查找id_Kotlin程序查找Sphere的体积
  8. springboot + vue 拦截器重定向_springboot学习笔记
  9. 关于IE6下用Jquery attr('onclick')问题
  10. 好用的jquery.animateNumber.js数字动画插件
  11. Java开源内容管理CMS系统J4CMS的几个样式
  12. java 从入门到精通PDF
  13. 计算机一级考试模拟软件安装方法,计算机一级考试软件怎么使用_计算机一级考试软件安装使用教程...
  14. qq手机令牌 for android3.3 官方安装版,原QQ安全助手|QQ手机管家 for Android 安卓版v3.3.0 - PC6安卓网...
  15. php怎么画五星红旗,php基于GD库画五星红旗的方法,phpgd库五星红旗_PHP教程
  16. 神经网络 语音识别,神经网络语音合成
  17. 车内贵重物品检测方案总结
  18. DICOM医学图像处理:BMP转DCM、DCM转BMP、多张BMP转DCM、JPG转DCM,,多张JPG转DCM。
  19. . [Error] no match for ‘operator=‘ (operand types are ‘STU‘ and ‘int‘)
  20. 李宏毅2017机器学习课程 回归

热门文章

  1. python cx_oracle配置_python连接oracle的模块cx_Oracle安装和配置
  2. 深度ip转换器手机版app_手机大师智能管家app下载-手机大师智能管家app官网版 v1.0.0...
  3. 【Pytorch神经网络实战案例】08 识别黑白图中的服装图案(Fashion-MNIST)
  4. 天池 在线编程 有序队列
  5. LeetCode MySQL 1549. The Most Recent Orders for Each Product
  6. 程序员面试金典 - 面试题 16.13. 平分正方形(数学)
  7. POJ 2259 team queue团队排队问题
  8. ad域不去用frs_Windows Server 2008搭建AD域控服务器 - 小王同学!
  9. c++ 不插入重复元素但也不排序_面试时写不出排序算法?看这篇就够了
  10. 数据库实例:用户登录