IO多路复用小故事

2020-04-26 15:24:54 浏览数 (2)

背景故事

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

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

远古版本

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

王总: 小张, 去邮局把北京的信件拿回来

小张: 好嘞

没多大一会, 小张回来了, 还带回来了一堆信件

王总: 嗯, 不错. 再去把天津的信件拿回来吧.

这次, 一直等到第五天, 小张回来了, 同时也把信件带回来了.

王总: 小张, 怎么这么慢啊? 奖金还想不想要了?

小张: 没办法啊, 王总. 邮局那边的人说了, 没有信件, 就不让我回来.

王总: 但是已经有用户投诉了, 送往河北的信已经发出好几天了, 还没送到, 咱们想个解决办法吧.

小张: 王总, 既然这样, 那就只能在招人了, 一个人负责取一个地方的信件, 这样才能保证信件到了之后可以立马拿回来啊.

王总: 行吧, 这也是没有办法的办法了.

于是, 又招来了两个员工, 每个员工负责一个地区的信件, 不停的去邮局取信.

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

初次升级

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

王总: 局长, 听说我的人去邮局拿信, 没有信就不让人走? 这是什么道理?

局长: 什么? 还有这种事情, 王总莫急, 我回去问问.

王总: 那真是辛苦局长了.

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

王总: 小张啊, 看你最近表现不错, 我决定工资给你翻一倍.

小张: 谢谢王总. 听说最近邮局出了新政策, 我每次取信的时候, 貌似都没有人留我了.

王总: 嗯, 没错. 经过我与邮局领导讨论, 决定废除之前留人的规定. 所以我决定公司取信的员工只留你一个人.

这下可把小张坑惨了, 他需要不停的取邮局取信, 不管有没有, 都要回来汇报一下, 然后继续去取下一个地方的信件.

但是公司现在只需要一个人就可以了, 嗯, 省钱.

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

再次升级

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

王总: 局长啊, 我觉得现在的规定有些可以改进的地方.

局长: 嗯? 我觉得挺好啊, 有什么问题你说说看.

王总: 现在我们的人去取信, 每次只能取一个地方的信, 但是我承包了4个城市, 能不能取信的时候可以一次性把4个城市的信件都给我啊.

局长: 嗯, 你的建议很好, 不过我还要开会讨论一下.

王总悄悄的留下一个红包, 走了.

没过几天, 邮局传来消息, 王总之前提的已经下发了最新命令. 允许取信人批量获取.

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

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

又升级

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

王总: 小张啊, 公司慢慢壮大了, 怎么你取信的速度变得慢了不少, 倒也没见你信件多拿回来啊.

小张: 王总, 你是不知道. 每次我去取信, 都要邮局的人一个城市一个城市的找, 之前只有4个城市, 找的自然快. 现在几十个城市, 自然就变慢了.

王总: 嗯, 这倒是个问题, 那有没有什么好的想法呢?

小张: 王总, 其实我已经想过了. 现在我去拿信, 不光他们找的慢, 还可能找到最后一封信件都没有. 之前我一天可能要往邮局跑几百趟, 很多其实都没有拿到信件.

当时我就想, 如果每次等有信件了, 我再去拿, 那我就可以少跑几次了. 所以, 如果邮局那边有新的信件, 打电话告诉我一下, 然后我去拿回来就完美了.

王总: 嗯, 也好, 之前总让你跑, 确实不是个办法.

经过与邮局的一番协商, 这个新的方案再度落实了. 这次小张倒落得清闲, 有信件的时候就去拿, 没有的时候喝喝茶等着就是了.

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

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

0 人点赞