I/O

五种 I/O 模型

通俗文字版

IO 多路复用是5种I/O模型中的第3种,对各种模型讲个故事,描述下区别:

故事情节为:老李去买火车票,三天后买到一张退票。参演人员(老李,黄牛,售票员,快递员),往返车站耗费1小时。

1.阻塞I/O模型

老李去火车站买票,排队三天买到一张退票。

耗费:在车站吃喝拉撒睡 3天,其他事一件没干。

2.非阻塞I/O模型

老李去火车站买票,隔12小时去火车站问有没有退票,三天后买到一张票。

耗费:往返车站6次,路上6小时,其他时间做了好多事。

3.I/O复用模型
select/poll

老李去火车站买票,委托黄牛,然后每隔6小时电话黄牛询问,黄牛三天内买到票,然后老李去火车站交钱领票。

耗费:往返车站2次,路上2小时,黄牛手续费100元,打电话17次

epoll

老李去火车站买票,委托黄牛,黄牛买到后即通知老李去领,然后老李去火车站交钱领票。

耗费:往返车站2次,路上2小时,黄牛手续费100元,无需打电话

4.信号驱动I/O模型

老李去火车站买票,给售票员留下电话,有票后,售票员电话通知老李,然后老李去火车站交钱领票。

耗费:往返车站2次,路上2小时,免黄牛费100元,无需打电话

5.异步I/O模型

老李去火车站买票,给售票员留下电话,有票后,快递送票上门,快递送到后直接通知。

耗费:往返车站1次,路上1小时,免黄牛费100元,无需打电话

1同2的区别是:自己轮询

2同3的区别是:委托黄牛

3同4的区别是:电话代替黄牛

4同5的区别是:电话通知是自取还是送票上门

图片版

图片偷自: 《web优化必须了解的原理之I/o的五种模型和web的三种工作模式》
在这里插入图片描述
其实这里用磁盘的例子并不是很好,因为根据《讲解磁盘IO和AIO》 , 磁盘的第一步总是非阻塞的

阻塞

block

非阻塞

nonblock

多路复用

multiplex

信号驱动:

event

异步

asyn

BIO NIO AIO

这段是我自己的想法,不一定对。

BIO 对应上面的 1,也就是apache 的实现

NIO 对应上面的 3, 大致相当于select 或者epoll,没用过java,不知道有没有fd的遍历,如果没有就更像epoll

AIO 对应上面的 5?

几篇相关的:

讲解BIO和NIO以及IO多路复用
讲解磁盘IO和AIO

关于同步,异步,阻塞,非阻塞,IOCP/epoll,select/poll,AIO ,NIO ,BIO的总结

关于epoll 的边沿触发
此处,一个遗留的问题: 边沿触发,没有读完的fd,在下一次新内容到达时会不会被触发?(答案大概是不会触发,但是我没编程验证过,后面验证过了,再改这句)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值