简单地说,阻塞IO和非阻塞IO是什么?

简单地说,阻塞IO和非阻塞IO是什么?,io,Io,你会如何解释一个简单的凡人关于阻塞IO和非阻塞IO?我发现这些概念在我们许多程序员中并不十分清楚。阻塞I/O意味着在I/O进行时程序执行被暂停。因此,程序等待I/O完成,然后继续执行。 在非阻塞I/O中,程序可以在I/O操作期间继续运行。简单地说。。非阻塞i/o(异步)允许在执行其操作时执行其他操作,阻塞i/o会阻塞其他操作,这是一个并发问题。在正常情况下,操作系统内核从用户程序接收到I/O操作后,该程序不会再次运行,直到I/O操作完成。其他程序通常会同时安排 这解决了很多小问题。例如,当rea

你会如何解释一个简单的凡人关于阻塞IO和非阻塞IO?我发现这些概念在我们许多程序员中并不十分清楚。

阻塞I/O意味着在I/O进行时程序执行被暂停。因此,程序等待I/O完成,然后继续执行。
在非阻塞I/O中,程序可以在I/O操作期间继续运行。

简单地说。。非阻塞i/o(异步)允许在执行其操作时执行其他操作,阻塞i/o会阻塞其他操作,这是一个并发问题。在正常情况下,操作系统内核从用户程序接收到I/O操作后,该程序不会再次运行,直到I/O操作完成。其他程序通常会同时安排

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

最终归结为:

  • 通过阻塞程序直到I/O完成,I/O与程序同步发生
  • I/O仅通过系统调用进行调度,并且存在一些通知机制来传达实际结果
  • 如果I/O操作不能立即完成,则会导致I/O操作失败。这是“非阻塞”I/O在实践中更常见的用法

  • 此外,当I/O可能只阻塞一个线程时,调度多线程程序的工作使整个问题变得复杂,但这是另一个问题…

    。。。并在IO操作完成时通过回调通知。这迫使您以不同的方式设计程序,但会使它们执行得更好。@Lex,有阻塞和非阻塞操作的例子吗?谢谢。@etc\u passwd在JS中很容易理解;调用
    alert()处于阻塞状态,因为在用户单击“确定”之前,执行一直处于挂起状态。AJAX调用是非阻塞的,在发送HTTP请求时继续执行。