通俗理解五种I/O通信模型

首先弄清楚,什么是同步和异步?

这里的同步和异步指的是CPU时间片的利用,如果是请求发起方主动轮询应答结果,这就是同步的;如果是请求发起后,服务方主动通知请求方调用结果,这就是异步的。大多数情况下,异步的通知是通过回调函数来实现的。

什么是阻塞和非阻塞?

指的是在请求结果出来之前,当前线程是挂起状态还是运行状态,如果是挂起状态,则是阻塞的;如果是运行状态,可以处理其他任务,就是非阻塞的。

五种I/O通信模型:阻塞I/O模型、非阻塞I/O模型、多路复用I/O模型、信号驱动I/O模型、异步I/O模型,以下是对这五种I/O模型的通俗理解:

一:阻塞I/O模型(同步)-BIO

示意图:

通俗理解:

假如我是应用程序进程,砖厂是内核,我想买一批砖回去盖房子。我和砖厂说要一批砖,砖厂说货还没转备好,要等。然后我就打算睡一觉等着。过了一会儿砖厂备好货了,于是砖厂一车一车的把砖给我运过来了。 砖来了之后,我开始盖房子。从买砖到收到砖,我一直等着,这个过程就是同步阻塞。

二:非阻塞I/O模型(同步)-NIO:

示意图:

通俗理解:

假如我是应用程序进程,砖厂是内核,我想买一批砖回去盖房子。我和砖厂说要一批砖,砖厂说货还没转备好,要等。然后我就在家边看电视边玩游戏等着。我一会打个电话问一下到了没有,砖厂说没到,一会我又问,又没到。过了一会儿砖厂那边备好货了,于是砖厂开始一车一车的把砖给我运过来了,砖厂运货期间我就在那盯着啥也没干。 砖都运完了之后,我开始盖房子。

三:多路复用I/O模型(同步)-select,poll,epoll

示意图:

通俗理解:

假如我、张三、李四都是应用程序进程,砖厂是内核,我们仨都想买一批砖回去盖房子。我们找了王五当代理,去给我们买砖。王五和砖厂说要一批砖,砖厂说货还没转备好,要等。然后王五就在那等着,我和张三、李四各自忙各自的。

过了一会儿砖厂那边说张三的砖备好货了,然后王五说那给我张三的货吧,于是砖厂开始一车一车的把砖给张三运过来了,砖厂运货期间张三就在那盯着啥也没干。 张三的砖都运完了之后,张三开始盖房子。然后王五继续在砖厂等着我和李四的砖备货。

四:信号驱动I/O模型(同步)-signal driven IO:

示意图:

通俗理解:

假如我是应用程序进程,砖厂是内核,我想买一批砖回去盖房子。我和砖厂说要一批砖,砖厂说货还没备好,要等。然后我说我留个电话,货备好了给我说一声。然后我就去忙自己的事了。过了一会儿砖厂那边备好货了,给我打电话之后,于是我就让砖厂开始一车一车的把砖给我运过来了,砖厂运货期间我就在那盯着啥也没干。 砖都运完了之后,我开始盖房子。

五:异步I/O模型(异步)-AIO:

示意图:

通俗理解:

假如我是应用程序进程,砖厂是内核,我想买一批砖回去盖房子。我和砖厂说要一批砖,包括砖的数量、放在哪等信息,砖厂说货还没备好,我说备好货后给送过去。然后我就去忙自己的事了。砖厂把砖按我的要求给放好这段时间,我都在干别的,直到砖厂告知我已经放好了。

理解了上述五种I/O通信模型后,可查看此篇博客,I/O这块知识写的非常详细,棒:

https://blog.csdn.net/weixin_50205273/article/details/108590394

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值