一、阻塞IO
为了完成IO发起IO调用,若IO事件没有就绪,则一直等待,直到IO就绪,开始数据拷贝。
优点:流程最为简单,使用复杂度非常低。
缺点:IO效率较低,对资料利用不足。
二、非阻塞IO
为了完成IO发起IO调用,若IO事件没有就绪,则调用直接返回(返回后,先进行一些其他任务,之后再重新发起IO调用)。
优点:不等待IO就绪,而是直接立即返回,可以继续对其他描述符进行IO操作,充分利用资源,效率相较于阻塞IO有所提高。
缺点:IO不够实时,且通常需要循环进行操作,增加了一定的复杂度。
三、信号驱动IO
先定义IO就绪信号处理方式,当收到信号通知,则表示IO就绪,随后发起IO调用,完成IO操作。
优点:效率更高,更加实时,更加充分利用资源(在没有收到IO信号之前,可以进行其他任务处理,收到信号后,再进行IO请求)。
缺点:IO复杂度更高,需要涉及到信号操作。
四、异步IO
发起IO调用,让系统进行IO就绪等待以及完成数据拷贝,完成后再通过信号通知进程。
注意:
(1)异步IO会告诉系统,需要对哪个描述符进行什么IO操作,要把IO操作的数据拷贝到哪块缓冲区,以及完成后通过什么信号通知进程。
(2)当进程收到信号,就表示IO已经完成,这时就可以直接对指定缓冲区中的数据进行处理。
优点:对系统资源利用非常高,效率也是最高。
缺点:流程复杂度也是最高。
五、阻塞VS非阻塞(概念)
1.阻塞
为了完成某个功能,发起一个调用,若功能无法立即完成,则调用不返回一直等待。
2.非阻塞
为了完成某个功能,发起一个调用,若功能无法立即完成,则报错返回。
3.区别与联系
阻塞与非阻塞,都是讨论接口特性,表示一个函数在完成某个功能时,若无法立即完成,是否会立即返回。
六、同步VS异步(概念)
1.同步
(1)是一种流程化操作,一个功能完成后才能进行下一个功能。
(2)功能的完成顺序固定。
(3)功能通常都是由自己完成。
例如:IO操作,一个IO操作完成后,才能进行下一个IO操作,(这就是同步IO)IO的完成过程是由进程自身完成。
优点:操作流程简单
缺点:效率相较较低
2.异步
(1)是一种非流程化操作,无论一个功能是否已经完成,都可以进行下一个功能。
(2)功能的完成顺序不确定。
(3)功能通常都是由别人完成。
例如:IO操作,不管是否完成,都可以立即发起下一个IO操作,IO的完成过程由系统完成。
优点:对系统资源利用更充分,效率相较更高
缺点:流程较为复杂
3.区别与联系
同步与异步,都是讨论功能的完成方式,同步表示的是按序由自己完成;异步表示的是非按序由系统完成。
同步:操作流程简单,但效率相较较低。
异步:对系统资源利用更充分,效率相较更高,但流程较为复杂。