非阻塞I / O是什么意思?

时间:2018-05-19 16:25:41

标签: io posix nonblocking

我理解这意味着一个I / O函数可以无限期地阻塞而不是立即返回。我的问题是,它是如何做到的?如果函数必须立即返回,但I / O设备不可用,会发生什么?显然它不能立即返回I / O操作的结果,因为操作没有机会执行,所以它必须做两件事之一:(1)现在返回结果表明失败,或(2)暂时将控制权返回给主程序并与主程序同时执行I / O操作,然后在I / O完成时再次返回。这是以下哪个?遵循的确切程序是什么?我能找到的所有资料都没有澄清这一点。

1 个答案:

答案 0 :(得分:1)

I / O函数将其操作委托给OS内核。通常,这些操作是异步的:OS指示外围设备执行操作,并最终从设备接收中断,指示成功或失败。与此同时,操作系统还可以执行许多其他操作,包括允许用户程序运行。

当I / O操作阻塞用户时,这意味着操作系统不会为该用户进程安排CPU时间,直到它从硬件收到完成中断为止。然后看起来好像该函数仅在完成后返回。实际上,它已准备好立即返回。在底层硬件请求完成之前,只有操作系统才能使用户进程处于等待状态。

当I / O操作对用户无阻塞时,操作系统允许用户在启动相应的硬件操作后立即继续处理。然后,必须为用户进程建立通知机制,以便在操作完成时得到通知。有关如何完成此操作的详细信息因操作系统而异。

<强>附录:

在Posix中,非阻塞意味着如果无法立即满足请求(例如,您想要读取某些内容但尚未收到数据),则会出现错误状态。然后由您重新发出请求。