Linux——五种IO模型(阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路转接IO)

五种IO模型

五种IO模型分别是:阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路转接IO

一.阻塞IO

1.含义:为了完成某种功能而发起调用后,若当前不具备IO条件则阻塞等待

2.特点:

   1)一次只能进行一个IO,多个IO的情况下,是串行的(还是一个接着一个)

   2)进程对CPU的利用率不高(因为有大量的时间都在等待IO就绪)

3.示意图:

二.非阻塞IO

1.含义:为了完成某种功能,发起IO调用,若当前不具备IO条件,立即报错返回。

2.特点:

   1)IO未就绪不会一直等待,可以先去执行其他事件,之后重新发起调用

   2)对CPU利用率提高(较阻塞IO比)

   3)控制流程较复杂,如果调用失败,应该循环判断

3.示意图:

三.信号驱动IO

1.含义:自定义一个IO信号的处理方式,收到IO信号则认为IO就绪,在信号回调中发起IO调用

2.特点:

   1)相较于非阻塞IO,更加灵活,实时性高

   2)控制流程更加复杂

3.示意图:

四.异步IO

1.含义:定义信号处理,发起异步IO调用,可以立即返回,IO的等待和数据的拷贝过程均由操作系统完成;完成后,通过信号通知进程IO处理完毕。

2.特点:

   1)相较于信号驱动IO,自己只发起调用,IO过程由操作系统完成,IO完成后,操作系统通知进程,进程直接对IO完毕的数据进行处理即可

   2)流程控制更加复杂

3.示意图:

    小结:从阻塞到非阻塞,再到信号驱动最后是异步,对资源的利用率越来越高,同时能够发起更多的IO调用,让一个程序的效率越来越高;但是,伴随着效率的提高,流程的控制也变得越来越复杂。

对比四种IO:

阻塞和非阻塞的区别:发起调用后,若当前IO条件不满足,是否立即返回

同步与异步:

同步:为了完成某个功能发起调用,进程自己完成,功能没有完成之前,流程不能向下进行

异步:为了完成某个功能发起调用,不由进程自己完成,而交由操作系统完成,完成后通知进程

五.多路转接IO

1.含义:对大量IO事件进行监控(可读/可写/异常),判断哪些IO就绪了,若就绪了,则可以让进程仅针对已就绪的描述符执行操作。

2.特点:

   进程可以避免对未就绪的描述符进行操作,从而避免了未就绪IO导致的阻塞,从而提高了效率

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值