【发布时间】:2009-09-26 07:59:20
【问题描述】:
你会如何解释一个关于阻塞 IO 和非阻塞 IO 的简单凡人?我发现我们很多程序员对这些概念都不是很清楚。
【问题讨论】:
标签: io
你会如何解释一个关于阻塞 IO 和非阻塞 IO 的简单凡人?我发现我们很多程序员对这些概念都不是很清楚。
【问题讨论】:
标签: io
阻塞 I/O 意味着程序执行在 I/O 进行时被暂停。所以程序一直等到 I/O 完成,然后继续执行。 在非阻塞 I/O 中,程序可以在 I/O 操作期间继续。
【讨论】:
alert(); 的调用被阻塞,因为执行被搁置,直到用户单击确定。 AJAX 调用是非阻塞的,在发送 HTTP 请求时继续执行。
这是一个并发问题。在正常情况下,操作系统内核从用户程序接收到 I/O 操作后,该程序不会再次运行,直到 I/O 操作完成。其他计划通常会在此期间安排。
这解决了很多小问题。例如,除非read(2) 返回时 I/O 完成,否则程序如何知道读取了多少字节?如果write(2) 返回时操作仍在进行中,它如何知道是否可以重用write(2) 缓冲区?显然,真正的异步 I/O 需要更复杂的接口。
最终归结为:
此外,当 I/O 可能只阻塞一个线程时,调度多线程程序的努力使整个问题变得复杂,但这是一个不同的问题......
【讨论】:
简单地说..非阻塞 i/o(异步)允许在它做它的事情时执行其他操作,而阻塞 i/o 会阻塞其他操作
【讨论】: