什么是简单的话阻止IO和非阻塞IO?

时间:2009-09-26 07:59:21

标签: io

您如何解释阻止IO和非阻塞IO的简单凡人?我发现这些概念在我们很多程序员中都不是很清楚。

3 个答案:

答案 0 :(得分:9)

阻止I / O意味着在I / O进行时程序执行被置于保持状态。因此程序会等待I / O完成,然后继续执行。 在非阻塞I / O中,程序可以在I / O操作期间继续。

答案 1 :(得分:4)

这是一个并发问题。在正常情况下,在OS内核从用户程序接收到I / O操作之后,该程序在I / O操作完成之前不会再次运行。其他程序通常会在此期间安排。

这解决了很多小问题。例如,除非read(2)返回时I / O完成,否则程序如何知道读取了多少字节?如果在write(2)返回时操作仍在进行中,它如何知道它是否可以重用write(2)缓冲区?显然,真正的异步I / O需要更复杂的接口。

最终归结为:

  1. 通过阻止程序直到I / O完成,I / O与程序同步发生
  2. I / O仅由系统调用调度,并且存在一些通知机制来传达实际结果
  3. 如果无法立即完成I / O操作,则会出现故障。这是在实践中更常见的“非阻塞”I / O使用。
  4. 当I / O可以想象只阻止一个线程时,整个问题变得复杂,因为安排多线程程序,但这是一个不同的问题......

答案 2 :(得分:0)

简单地说..非阻塞i / o(异步)允许执行其他操作,而阻塞i / o会阻止其他操作