这是一个并发问题。通常情况下,操作系统内核从用户程序接收到I/O操作后,该程序在I/O操作完成之前不会再次运行。其他程序通常在此期间被调度。这解决了许多小问题。例如,如果I/O操作未完成,read(2)返回时程序如何知道读取了多少字节?如果write(2)操作仍在进行中,write(2)返回时它如何知道是否可以重用缓冲区?显然,需要更复杂的接口来实现真正的异步I/O。归根结底,问题在于: I/O与程序同步进行,通过阻塞程序直到I/O完成 仅通过系统调用安排I/O,并存在某种通知机制以传达真实结果 如果无法立即完成I/O操作,则I/O操作将简单地失败。这是“非阻塞”I/O的更常见用法。 此外,当I/O可能仅阻止一个线程时,为多线程程序安排时间表也使问题更加复杂,但这是另一个问题...
alert();
是阻塞的,因为执行被暂停直到用户点击OK。AJAX调用是非阻塞的,当HTTP请求正在发送时继续执行。 - user254875486