您如何解释阻止IO和非阻塞IO的简单凡人?我发现这些概念在我们很多程序员中都不是很清楚。
答案 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需要更复杂的接口。
最终归结为:
当I / O可以想象只阻止一个线程时,整个问题变得复杂,因为安排多线程程序,但这是一个不同的问题......
答案 2 :(得分:0)
简单地说..非阻塞i / o(异步)允许执行其他操作,而阻塞i / o会阻止其他操作