最通俗的 BIO 伪异步IO NIO(配合IO多路复用) AIO

BIO,伪异步IO,NIO,AIO是什么

现在有一个小区,小区里有一个快递点。现在有很多住户每天都会收到快递,需要自己去快递点收取快递。 就是原始的BIO方案

       每个住户在知道自己今天有快递要来的时候就去快递点拿快递,但是去的时候快递可能还没到,可能晚上才到。即使这样,住户还是在快递点等一天,什么都不做(阻塞)。直到拿到自己的快递才回家。可想而知,如果今天快递车来的晚,有多少傻子在快递点等快递,甚至快递点会被挤爆!于是物业为了管理,采用了伪异步IO方案

       雇了二十个快递员专门等快递,不管是谁家的,来回送。这样快递点不会挤爆了,但是服务效率还是相当低下。万一谁的快递晚到了,快递员还是只会傻等。排在后面的客户长时间得不到服务后,怨声载道。雇佣的二十个快递员的成本也让物业叫苦不迭。为了解决这种情况,大家又选择了NIO方案

       首先要让快递员聪明起来,对于不是立即配送的顾客,快递员可以先干别的,时不时问一下快递点是不是可以配送了。如果可以,再进行配送。但是还是有点蠢,而且快递员除了送快递也不想干别的。那么我们可以配合IO多路复用方案:快递员依次检查今天的快递目标,看看谁的快递已经到了,检查完之后如果有可以快递的目标,那么就统一送货,没有就持续检查,直到有为止。这样这个小区的快递问题只需要一个快递员就解决了。大家都觉得可以接受,除了物业。物业觉得自己平白无故多雇了一个人,有点不爽。想要更高级的解决方案。然后就和快递点老板商量拿出了AIO方案

      就是老板辛苦一点,看到谁的快递到了,送快递到楼下,给对应住户打电话(消息回调),让住户下楼来拿就可以了。

 

 

在这个小故事里,快递员,住户都是用户线程,需要耗费系统成本。在BIO中成本不可控,线程太多可能会让系统资源耗尽,也就是快递点爆了。伪异步IO中,成本可控了,但是如果发生大规模阻塞,很容易让其他排在后面不阻塞的用户得不到资源“饿死”,而且成本依然不低。NIO配合IO多路复用让一个线程监控所有IO端点,成本得到显著降低。但是要注意IO本身所花费的时间不会降低,只是不会再有线程阻塞这种情况发生,所以总时间得到控制。值得注意的是:NIO是同步非阻塞线程,同步是因为IO(配送过程)需要线程自己执行,而AIO不需要(具体可以参考下面的时序图,截取https://www.cnblogs.com/welen/articles/5385837.html)

NIO(多路复用)

AIO

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值