阻塞IO、非阻塞IO、多路复用IO、异步IO

第一次发文章,写的不好请见谅,写错了请指正。

文章使用到饮水机接水来打比方、下文中杯子没有接水和没有接满水统称为没有接满水。

当我们想要喝水的时候需要拿着杯子到饮水机旁接水,这个过程就是我们需要IO操作场景。正常情况下是饮水机里有水,我们接完后就直接走掉了,但是有的时候我们倒霉,刚好碰到了没有水的情况,面对这些没有水的倒霉情况,我们就产生了不同的应对策略,也就是我们说的阻塞IO、非阻塞IO、多路复用IO、异步IO。

阻塞IO

当饮水机里没有水的时候,我们的杯子没有接满水,这个时候阻塞IO的策略就像我们拿着杯子,一直等到饮水机里有水,然后我们接满后才离开。

在等待的过程中,我们什么事情都不做就是等着有水然后接水。把我们想成是一个线程,我们的老大是操作系统,我们的老大希望我们赶紧接完水,然后去工作。同时接水的可能有很多人,老大就需要来回的查看我们有没有接满水,也就是线程的上下文切换,这就让浪费了老大的时间,就是产生了很大的系统开销。

非阻塞IO

这个策略是当我们碰到没有水的的情况或者我们没有接满水,我们返回到我们的工位,继续干我们的活,然后每过一段时间就去查看饮水机有没有水,有水我们就接满然后继续干活。

这个策略解决了系统上下文切换的开销的问题,但同时也产生了我们需要每隔一段时间就要看饮水机有没有水。

多路复用IO

回到阻塞IO,一个房间里有很多个人在等接水,老大看我们人有点多,于是就安排了一个人负责指定房间里等接水的人。当有饮水机有水时,站在这个饮水机前的人就可以准备接水了,这个时候这个人就会通知老大,然后老大就找到这个人(线程拿到CPU),接满水后就拉走继续干活。

异步IO

这个策略就是给我们一个智能设备,当饮水机里没有水的时候我们就继续回去干活,当饮水机里有水的时候,这个设备就会通知我们,然后我们去接满水,然后继续干活,使我们不停的在干活(资本家听了都流泪),效率就得以提升。

补充

因为个人的表达原因,上述每个人物代表的东西有些问题。

实际上计算机需要IO操作,饮水机相当于缓冲区,操作系统需要在这里读取数据,也就是接水。例子里面接水的是我们,实际上在计算机中执行IO操作的(接水这个过程)是CPU,也就是老大,我们扮演的角色是线程,实际上并没有执行能力。

由于个人的表达原因,讲述的不是很好,对实际上IO操作各个部件的功能有些扭曲,这个问题可以自行百度,然后加以总结就行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值