典型IO模型的理解


一、典型IO模型

IO,输入输出,过程分为两步:
一步是等待IO就绪,一步是拷贝数据,
对数据进行对应的处理。

(一)阻塞IO

为了完成IO操作,发起IO调用,
若是当前不具备IO完成的条件,则调用不返回,一直等待。

1.人去钓鱼,把鱼饵抛入水中,接下来一直等浮漂抖动,抖动就表示有鱼,加粗样式浮漂不动,人就一直等着。
阻塞IO
优点

  • 操作简单,清晰明了。

缺点

  • 效率较低,资源没有充分利用。

(二)非阻塞IO

为了完成IO操作,发起IO调用,若是当前不具备IO完成的条件,则调用立即报错返回。

  • 人去钓鱼,觉得一直盯着浮漂不划算,所以掏出手机打一把游戏,打完了再看浮漂。
    非阻塞IO

优点

  • 效率相较于阻塞操作有所提高,提升了资源利用率。

缺点

  • 流程复杂了一点,需要循环进行操作才能成功;
  • 操作不够实时,必须等到当前其他操作完成才能重新调用。

(三)信号驱动IO

为了提高资源利用率,先自定义IO就绪信号,
当收到就绪信号,则表示IO就绪,这时候发起调用直接拷贝数据。

3.人去钓鱼,为了更加实时,人就给鱼竿上绑了一个铃铛,在抛下鱼饵后,人就开始打游戏,等到铃铛响了再钓鱼。
信号驱动IO
优点:

  • 资源利用率高,实时性高。

缺点:

  • 流程相对复杂。

(四)异步IO

别人把事情做好了再叫自己;
发起一个异步IO调用,IO操作由系统完成,完成后通知进程。

4.人去钓鱼,钓鱼的目的是为了做鱼吃,去钓鱼的时候带上另一个人,让另一个人钓鱼,掉到后顺便做好,然后再叫自己。
异步IO
优点:

  • 资源利用率最高,效率是最高的。

缺点:

  • 流程是最复杂的。

有兴趣的可以了解Linux下的AIO—Linux下的异步IO, 常用于高性能IO要求场景。

(五)总结

1.阻塞

为了完成一个操作发起调用,若当前不具备完成条件,则调用不返回。

2.非阻塞

为了完成一个操作发起调用,若当前不具备完成条件,则报错返回。

3.阻塞与非阻塞

通常用于讨论一个接口的特性, 发起一个接口调用之后,接口是否能够立即返回。

4.同步

这个同步不是同步互斥的同步,而是同步异步的同步,
描述的是一种操作流程,操作自己完成,一个完成后才能进行下一个。

5.异步

操作由系统完成,不用等待一个完成才能进行下一个,
而是可以直接发起下一个操作,操作完成后系统会通知进程。

6.异步阻塞

发起异步操作后,等待系统完成。

7.异步非阻塞

发起异步操作后,不等待系统完成,操作接口直接返回。

8.同步与异步

通常用于讨论操作流程思想。
(操作是由自己一个一个按流程完成,还是发起操作由系统完成后通知自己)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值