小曲在S城开了一家快递店,负责同城快送服务。小曲因为资金限制,雇佣了一批快递员,然后小曲发现资金不够了,只够买一辆车送快递。

经营方式一

客户每送来一份快递,小曲就让一个快递员盯着,然后快递员开车去送快递。慢慢的小曲就发现了这种
经营方式存在下述问题:
1、几十个快递员基本上时间都花在了抢车上了,大部分快递员都处在闲置状态,谁抢到了车,谁就能去送快递
2、随着快递的增多,快递员也越来越多,小曲发现快递店里越来越挤,没办法雇佣新的快递员了
3、快递员之间的协调很花时间
综合上述缺点,小曲痛定思痛,提出了下面的经营方式

经营方式二

小曲只雇佣一个快递员。然后呢,客户送来的快递,小曲按送达地点标注好,然后依次放在一个地方。最后,那个快递员依次的去取快递,一次拿一个,然后开着车去送快递,送好了就回来拿下一个快递。对比 上述两种经营方式对比,是不是明显觉得第二种,效率更高,更好呢。在上述比喻中:

每个快递员------------------>每个线程

每个快递-------------------->每个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等多路复用函数库,大家可以自行去了解。

Redis非阻塞I/O多路复用机制相关推荐

  1. 非阻塞I/O多路复用机制

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

  2. 网络传输中的两个阶段、阻塞IO、非阻塞IO和多路复用

    今天学习了网络传输中的两个阶段.阻塞IO.非阻塞IO和多路复用 一.网络传输中的两个阶段 分别是 waitdata 和 copydata send就是copydata recv是waitdata和co ...

  3. Redis 笔记(12)— 单线程架构(非阻塞 IO、多路复用)和多个异步线程

    Redis 使用了单线程架构.非阻塞 I/O .多路复用模型来实现高性能的内存数据库服务.Redis 是单线程的.那么为什么说是单线程呢? Redis 在 Reactor 模型内开发了事件处理器,这个 ...

  4. 阻塞IO、非阻塞IO和多路复用IO

    1.阻塞IO模型   最传统的一种IO模型,即在读写数据过程中会发生阻塞现象.   当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户 ...

  5. 网络编程06-服务器编程非阻塞IO、多路复用

    目录 一.服务器编程中四种高性能IO模型 1.阻塞IO 2.非阻塞 IO 3.多路复用 4.信号驱动 二.阻塞IO 三.非阻塞IO 1.阻塞IO与非阻塞IO之间的差异 2.如何给文件描述符设置非阻塞属 ...

  6. Linux Socket网络编程UDP、TCP 阻塞与非阻塞 断线重连机制

    三种非阻塞模式的方法: (1) fcntl函数 int Mode = fcntl(sockfd, F_GETFL, 0);       //获取文件的Mode值     fcntl(sockfd, F ...

  7. 阻塞IO 非阻塞IO IO多路复用 异步IO 区别

    Linux中五种IO模型:阻塞IO模型.非阻塞IO模型.IO复用模型.信号驱动IO模型.异步IO模型 linux的内核将所有外部设备都看作一个文件来操作,针对一个文件的读写会调用内核提供的系统命令,返 ...

  8. 嵌入式驱动初级-阻塞与非阻塞

    文章目录 前言 一.五种IO模型 二.阻塞与非阻塞 三.多路复用 四.信号驱动 前言 记录嵌入式驱动学习笔记 一.五种IO模型 当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 ...

  9. 网络IO之阻塞、非阻塞、同步、异步总结

    1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解.网上有详 ...

最新文章

  1. GitHub开源的最全中文诗歌古典文集数据库
  2. 关于局部变量表slot的理解
  3. pdf各种处理 PDF 的实用代码:PyPDF2、PDFMiner、pdfplumber
  4. 2021中卫一中高考成绩查询,2021年宁夏高中排名及分数线 高考本科升学率排行榜...
  5. 面试官 | Class.forName 和 ClassLoader 有什么区别?
  6. springmvc重定向到另一个项目_springmvc怎么重定向,从一个controller跳到另外一个controller...
  7. 关于servlet类,继承HttpServlet,但是无法导入HttpServlet包的原因和解决方法
  8. 在ASP.NET中清除页面状态
  9. Java IO-InputStream家族 -装饰者模式
  10. 串口termios函数
  11. 微信小程序获取openid和用户信息
  12. 2019新个税如何计算
  13. Kademlia详解 (转贴NeoRagex2002)
  14. python使用多进程高效处理任务
  15. 饿了么为啥给你推荐这个?本地生活搜索算法解密
  16. Android平台开发-Android keypad map-Android按键事件
  17. Android 长按APP图标弹出快捷方式(shortcuts)
  18. 甲减、甲状腺相关疾病最新研究、治疗进展(2021年下半年)
  19. 纯css3圆柱模板立体图
  20. BZOJ2277 [Poi2011]Strongbox 【数论】

热门文章

  1. pta数据结构 彩虹瓶(c++实现)(详解)
  2. Serial.println()和Serial.print() (Arduino编程)
  3. Java偏向锁、轻量级锁、重量级锁
  4. P4211 [LNOI2014]LCA(离线 + 在线 做法)
  5. P5049 [NOIP2018 提高组] 旅行
  6. 牛客网【每日一题】4月30日题目精讲 换个角度思考
  7. 分羊(区间dp:分治与决策单调性优化)
  8. 二分:路标设置(洛谷)
  9. P5319-[BJOI2019]奥术神杖【0/1分数规划,AC自动机,dp】
  10. jzoj2755-[2012东莞市选]树的计数【dp,高精度】