背景故事

小王住在某城市, 生活并长大. 最近, 小城引进了一个企业, 邮局. 这个邮局可了不得, 只要你花上几角钱, 就可以将一封信送到千里之外的朋友手中. 小王也趁机体验了一把, 得劲.

这天, 小王躺在床上想, 既然这个邮局这么好, 咱何不从中分一杯羹呢? 但是现在人家邮局基本都可以说是垄断了, 咱这刚刚起步又能如何呢? 哎, 有了, 既然他把信都收集起来, 那总归是要送出去的吧, 我就把送信的给包下来. 想到就做到, 第二天, 小王就去邮局谈这个事情, 经过一番协商, 将送往京津冀的信件包了下来.

远古版本

包下来之后, 简单注册了一下, 小公司正式成立了. 先招个人来, 毕竟咱也是老板了. 招聘信息发出后, 第二天新员工小张就到了. 正式开工了.

王总: 小张, 去邮局把北京的信件拿回来
小张: 好嘞
没多大一会, 小张回来了, 还带回来了一堆信件
王总: 嗯, 不错. 再去把天津的信件拿回来吧.
这次, 一直等到第五天, 小张回来了, 同时也把信件带回来了.
王总: 小张, 怎么这么慢啊? 奖金还想不想要了?
小张: 没办法啊, 王总. 邮局那边的人说了, 没有信件, 就不让我回来.
王总: 但是已经有用户投诉了, 送往河北的信已经发出好几天了, 还没送到, 咱们想个解决办法吧.
小张: 王总, 既然这样, 那就只能在招人了, 一个人负责取一个地方的信件, 这样才能保证信件到了之后可以立马拿回来啊.
王总: 行吧, 这也是没有办法的办法了.
于是, 又招来了两个员工, 每个员工负责一个地区的信件, 不停的去邮局取信.

这就是最古老的版本了, 多线程阻塞式读取. 很显然, 耗费大量人力.

初次升级

就这样过了两个月, 小王的业务是越做越大, 在原来京津冀的基础上, 又承包了内蒙地区. 所以, 需要为内蒙地区再招一个人进来. 王总是越想越不对劲, 那岂不是以后再扩展业务, 都要频繁的招人嘛? 不行, 我得找邮局聊聊. 于是, 王总找到了邮局局长.

王总: 局长, 听说我的人去邮局拿信, 没有信就不让人走? 这是什么道理?
局长: 什么? 还有这种事情, 王总莫急, 我回去问问.
王总: 那真是辛苦局长了.

这局长办事, 效率就是不一样, 第二天消息回来了. 以后邮局不许把收信的人扣下. 小王心中的小算盘得逞了. 你想啊, 原本需要4个人干的活, 现在一个人就干了. 只要不停的去邮局取信就行了. 小张跟自己的时间最长, 王总考虑之后, 还是决定把小张留下.

王总: 小张啊, 看你最近表现不错, 我决定工资给你翻一倍.
小张: 谢谢王总. 听说最近邮局出了新政策, 我每次取信的时候, 貌似都没有人留我了.
王总: 嗯, 没错. 经过我与邮局领导讨论, 决定废除之前留人的规定. 所以我决定公司取信的员工只留你一个人.
这下可把小张坑惨了, 他需要不停的取邮局取信, 不管有没有, 都要回来汇报一下, 然后继续去取下一个地方的信件.
但是公司现在只需要一个人就可以了, 嗯, 省钱.

这就是在之前基础上, 稍加改进之后的: 非阻塞式轮训读取.

再次升级

最然公司现在只需要一个人了, 但是小张这每天跑来跑去的给累够呛. 现在是4个地方的信件, 全部拿回来, 小张就需要往邮局跑4趟, 本来一趟就能拿回来, 这不多此一举么? 费时费力的. 想到这, 小张发现了这个规则需要改进的地方, 但是他又不知道如何跟邮局高层反应, 只好告诉王总. 王总一听, 嗯, 有道理. 如果可以这样的话, 那拿信件的速度不就更快了么, 用户体验上更上一层楼啊, 得赶快落实下来.

王总: 局长啊, 我觉得现在的规定有些可以改进的地方.
局长: 嗯? 我觉得挺好啊, 有什么问题你说说看.
王总: 现在我们的人去取信, 每次只能取一个地方的信, 但是我承包了4个城市, 能不能取信的时候可以一次性把4个城市的信件都给我啊.
局长: 嗯, 你的建议很好, 不过我还要开会讨论一下.
王总悄悄的留下一个红包, 走了.
没过几天, 邮局传来消息, 王总之前提的已经下发了最新命令. 允许取信人批量获取.

从此, 从邮局取信更快捷了.

这就是select版本. 可以一次性批量向系统提出查询, 然后批量返回.

又升级

就这样又安稳的过了五个月, 随着业务的不断长大, 王总已经接下了全国40多个地区的信件. 但是随着地区的增加, 小张去取信的速度也变慢了, 王总心里不得劲了, 这个小张变的懒惰了, 回头要好好说说他.

王总: 小张啊, 公司慢慢壮大了, 怎么你取信的速度变得慢了不少, 倒也没见你信件多拿回来啊.
小张: 王总, 你是不知道. 每次我去取信, 都要邮局的人一个城市一个城市的找, 之前只有4个城市, 找的自然快. 现在几十个城市, 自然就变慢了.
王总: 嗯, 这倒是个问题, 那有没有什么好的想法呢?
小张: 王总, 其实我已经想过了. 现在我去拿信, 不光他们找的慢, 还可能找到最后一封信件都没有. 之前我一天可能要往邮局跑几百趟, 很多其实都没有拿到信件.
当时我就想, 如果每次等有信件了, 我再去拿, 那我就可以少跑几次了. 所以, 如果邮局那边有新的信件, 打电话告诉我一下, 然后我去拿回来就完美了.
王总: 嗯, 也好, 之前总让你跑, 确实不是个办法.
经过与邮局的一番协商, 这个新的方案再度落实了. 这次小张倒落得清闲, 有信件的时候就去拿, 没有的时候喝喝茶等着就是了.

从此, 王总的公司日渐壮大, 小张也平步青云.

这就是epoll版本, 将需要的数据绑定, 交由系统管理, 新消息是由系统通知.


以上是将一篇历史文章简单故事化, 查看历史文章: redis的多路复用是什么鬼

IO多路复用小故事的更多相关文章

  1. Python:通过一个小案例深入理解IO多路复用

    通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import time start = time.time() ...

  2. IO多路复用之select总结

    1.基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程.IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/ ...

  3. python中的IO多路复用

    在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...

  4. 【知乎网】Linux IO 多路复用 是什么意思?

    提问一: Linux IO多路复用有 epoll, poll, select,知道epoll性能比其他几者要好.也在网上查了一下这几者的区别,表示没有弄明白. IO多路复用是什么意思,在实际的应用中是 ...

  5. 聊聊IO多路复用之select、poll、epoll详解

    本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538922&idx=1&sn=e6b436ef ...

  6. python之IO多路复用

    在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...

  7. IO多路复用的几种实现机制的分析

    http://blog.csdn.net/zhang_shuai_2011/article/details/7675797 select,poll,epoll都是IO多路复用的机制.所谓I/O多路复用 ...

  8. linux select 与 阻塞( blocking ) 及非阻塞 (non blocking)实现io多路复用的示例

    除了自己实现之外,还有个c语言写的基于事件的开源网络库:libevent http://www.cnblogs.com/Anker/p/3265058.html 最简单的select示例: #incl ...

  9. IO多路复用之select

    IO多路复用之select总结   1.基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程.IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交 ...

随机推荐

  1. Hive学习笔记七

    目录 函数 一.系统自带函数 二.自定义函数 三.自定义UDF函数开发案例 压缩和存储 一.Hadoop源码编译支持Snappy压缩 1.资源准备 2.jar包安装 3.编译源码 二.Hadoop压缩 ...

  2. iOS 图片圆角性能

    通常设置圆角方式 imageView.clipsToBounds = YES; imageView.layer.cornerRadius = 50; 这样设置会触发离屏渲染,比较消耗性能.比如当一个页 ...

  3. Centos7 搭建FTP服务

    安装vsftpd yum install -y vsftpd 修改配置文件 cd /etc/vsftpd user_list # 白名单 ftpusers # 黑名单 vsftpd.conf # 配置 ...

  4. captcha-killer burp验证码识别插件体验

    0x01 使用背景 在渗透测试和src挖洞碰到验证码不可绕过时,就会需要对存在验证码的登录表单进行爆破,以前一直使用PKav HTTP Fuzzer和伏羲验证码识别来爆破,但是两者都有缺点PKav H ...

  5. Johnson-Trotter(JT)算法求全排列

    Johnson-Trotter算法描述 算法 JohnsonTrotter(n) //实现用来生成排序的 Johnson-Trotter 算法 //输入:正整数n(代表序列1,2,···,n) //输 ...

  6. JAVA WEB随笔

    servlet生命周期: 1.构造器(单利)2.init(单例)3.service(多例,每次请求都会执行)4.销毁方法destroyservlet解析客户端请求流程:1.web客户端向servlet ...

  7. Rust入坑指南:万物初始

    有没有同学记得我们一起挖了多少个坑?嗯-其实我自己也不记得了,今天我们再来挖一个特殊的坑,这个坑可以说是挖到根源了--元编程. 元编程是编程领域的一个重要概念,它允许程序将代码作为数据,在运行时对代码 ...

  8. JDBC下Date类型转换问题

    一.前言 在学过MVC后,其中的DAO层是负责与数据库进行进行数据交互,而service层个servlet层需要数据时,不允许直接向数据库要,而是通过Dao层来获取相关数据.这个时候,就引出一个规定& ...

  9. 基于Websocket开发的仿微信聊天室

    一.运行环境及涉及技术:----------------------------------* Visual Studio 2019* SQL SERVER 2008 R2* .Net FrameWo ...

  10. 第一讲:Git分区,配置与日志

    前言 曾经听到过这样一句话:不会git就不要敲代码了.细细品味确实有其中的道理,可能是当事人代码被强行覆盖后的叹息吧! 因此,为了避免这种情况,接下来我们就一起来好好学习git的相关知识吧!不怕你不会 ...