文件I/O方式比较

1、阻塞式文件I/O

这里写图片描述
如图所示,一旦进程期望读取数据,就调用read/write函数,进程从调用这些函数开始,一直到返回的这段时间里,都处于阻塞状态。当recv正常返回时,进程继续其它操作

这种模式的优点在于操作简单,但整个进程在等待过程中处于阻塞状态,不能申请到CPU执行其它操作


2、非阻塞式

这里写图片描述
如果设置某个文件IO操作为非阻塞I/O,即相当于告诉内核:如果当前没有数据可操作,将不阻塞当前进程,而是返回一个错误信息。
使用非阻塞I/O方式,虽然不阻塞当前进程,但需要反复尝试,如上图,为了从文件中获数据,当前进程需要反复调用read/recv函数,直到读取到数据


3、多路复用

这里写图片描述
多路复用方式仍然是以阻塞方式等待文件IO准备好,但其可以等待多个文件描述符,如果当前有一个或多个socket有状态发生变化,从阻塞状态返回,转而处理该文件描述符IO操作


4、信号驱动

这里写图片描述
前面三种模式都是以同步方式去获取数据,因此,内核提供了另一种异步数据处理方式,其让内核在文件描述符就绪后产生SIGIO信号,通知用户进程数据或者空间准备好,这种模式就称为信号驱动异步I/O模式

这种处理方式使用户不用重复询问内核该文件描述符是否准备好


5、异步IO

由内核在数据拷贝完成时,通知应用程序(相比于信号驱动IO,不会阻塞应用程序)

在任何IO过程中,都包含两个步骤:等待(数据准备好)、拷贝数据。
在实际应用场景中,等待消耗的时间往往都远远高于拷贝的时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值