非阻塞 I/O 是什么意思?
What does non-blocking I/O mean?
我理解这意味着 I/O 函数可以无限期地阻塞而不是立即 returns。我的问题是,它是如何做到的?如果函数必须立即 return,但 I/O 设备不可用,会发生什么情况?显然它不能 return 立即使用 I/O 操作的结果,因为操作还没有机会执行,所以它必须做两件事之一:要么 (1) return现在结果提示失败,或者(2)return暂时控制主程序,与主程序同时执行I/O操作,然后再次return时I/O完成。这是哪一个?遵循的具体程序是什么? None 我能够找到的资料阐明了这一点。
I/O 函数将其操作委托给 OS 内核。一般来说,这些操作是异步的:OS 指示一个外围设备执行一个操作,并最终收到来自该设备的中断,指示成功或失败。与此同时,OS 还做了很多其他事情,包括允许用户程序 运行.
当 I/O 操作对用户阻塞时,这意味着 OS 不会为该用户进程安排 CPU 时间,直到它收到来自硬件。然后看起来好像函数 return 仅在完成后才编辑。实际上,它已准备好 return 立即。只有 OS 让用户进程一直处于等待状态,直到底层硬件请求完成。
如果 I/O 操作对用户来说是非阻塞的,那么 OS 让用户进程在启动相应的硬件操作后立即继续。然后有必要为用户进程建立一个通知机制,以便在操作完成时得到通知。有关如何完成此操作的详细信息从 OS 到 OS。
附录:
在Posix中,非阻塞意味着如果一个请求不能立即完成(例如你想读一些东西但数据还没有收到),那么你会得到一个错误状态。然后由您稍后重新发出请求。
我理解这意味着 I/O 函数可以无限期地阻塞而不是立即 returns。我的问题是,它是如何做到的?如果函数必须立即 return,但 I/O 设备不可用,会发生什么情况?显然它不能 return 立即使用 I/O 操作的结果,因为操作还没有机会执行,所以它必须做两件事之一:要么 (1) return现在结果提示失败,或者(2)return暂时控制主程序,与主程序同时执行I/O操作,然后再次return时I/O完成。这是哪一个?遵循的具体程序是什么? None 我能够找到的资料阐明了这一点。
I/O 函数将其操作委托给 OS 内核。一般来说,这些操作是异步的:OS 指示一个外围设备执行一个操作,并最终收到来自该设备的中断,指示成功或失败。与此同时,OS 还做了很多其他事情,包括允许用户程序 运行.
当 I/O 操作对用户阻塞时,这意味着 OS 不会为该用户进程安排 CPU 时间,直到它收到来自硬件。然后看起来好像函数 return 仅在完成后才编辑。实际上,它已准备好 return 立即。只有 OS 让用户进程一直处于等待状态,直到底层硬件请求完成。
如果 I/O 操作对用户来说是非阻塞的,那么 OS 让用户进程在启动相应的硬件操作后立即继续。然后有必要为用户进程建立一个通知机制,以便在操作完成时得到通知。有关如何完成此操作的详细信息从 OS 到 OS。
附录:
在Posix中,非阻塞意味着如果一个请求不能立即完成(例如你想读一些东西但数据还没有收到),那么你会得到一个错误状态。然后由您稍后重新发出请求。