典型IO模型----阻塞IO,非阻塞IO,信号驱动IO,异步IO


IO完成的过程:
1.等待IO就绪(满足IO的条件)
2.进行数据拷贝

阻塞IO

发起IO调用,若IO条件不具备,则一直等待
在这里插入图片描述
优点:流程简单,代码操作简单,任务顺序操作
缺点:无法充分利用资源,任务处理效率比较低

非阻塞IO

发起IO调用,若IO条件不具备,则立即报错返回,可以干点其他事情,完毕后循环回来重新发起IO请求
在这里插入图片描述
优点:任务处理小效率稍有提高,利用了IO等待时间可以干其他事情
缺点:流程相对于阻塞IO较为复杂,需要循环处理,响应不够实时,因为只有等事情办完之后才能循环回去重新发起IO

信号驱动IO

定义IO就绪信号处理方式,在处理方式中进行IO请求,进程可以一直干其他事,等到收到IO就绪信号的时候,会打断进程当前操作去处理进行IO
优点:相较于非阻塞IO,更加实时,资源利用更加充分
缺点:流程更加复杂了,需要定义信号处理,既有主控流程又有处理流程,涉及到信号是否可靠的问题

异步IO

IO顺序不确定,IO过程由系统完成,不自己进行,定义IO完成信号处理方式自定义,发起异步IO调用,告诉系统要完成什么功能,剩下的IO功能完全由系统完成,完成后通过信号通知进程

优点:对资源的利用最为充分,以最高效率进行任务处理
缺点:资源消耗比较高,流程最为复杂

总结

这四种IO,其实就是处理效率的逐步增加,对资源的利用更加充分,流程越来越复杂的进化过程
概念理解:

阻塞:为了完成一个功能,发起调用,若不具备完成功能的条件,则调用一直等待
非阻塞:为了完成一个功能,发起调用,若不具备完成功能的条件,则立即报错返回
阻塞与非阻塞的区别:常用于讨论调用函数是否阻塞,表示这个函数无法立即完成功能时是否立即返回

同步:功能完成的流程通常是顺序化的,并且功能是进程自身完成的
异步:功能完成的流程通常是不确定的,并且功能不是由进程自身完成的,由系统完成
异步的种类:异步阻塞—等着系统完成功能/异步非阻塞—不等待系统完成功能
同步与异步的区别:通常用于讨论功能的完成方式,表示一个功能是否是顺序完成且由自己来完成
同步好还是异步好:同步处理流程简单,同一时间占用资源少,但是异步处理效率高,同一时间占用资源多

おすすめ

転載: blog.csdn.net/Hedenghui777/article/details/113809114