Node.js 为什么NodeJS在轮询阶段会阻止自己?

Node.js 为什么NodeJS在轮询阶段会阻止自己?,node.js,Node.js,发件人: 阶段概述 计时器:此阶段执行setTimeout()和 setInterval() 挂起回调:执行延迟到的I/O回调 下一个循环迭代 空闲,准备:仅在内部使用 轮询:检索新的I/O事件;执行与I/O相关的回调(几乎所有 除了关闭回调(由计时器安排的回调)之外, 和setImmediate());适当时,节点将在此阻塞 检查: 这里调用setImmediate()回调。关闭回调:一些 关闭回调,例如socket.on('close',…) 在每次运行事件循环之间,Node.js检查它是否

发件人:

阶段概述

  • 计时器:此阶段执行setTimeout()和 setInterval()
  • 挂起回调:执行延迟到的I/O回调 下一个循环迭代
  • 空闲,准备:仅在内部使用
  • 轮询:检索新的I/O事件;执行与I/O相关的回调(几乎所有 除了关闭回调(由计时器安排的回调)之外, 和setImmediate());适当时,节点将在此阻塞
  • 检查: 这里调用setImmediate()回调。关闭回调:一些
  • 关闭回调,例如socket.on('close',…)
  • 在每次运行事件循环之间,Node.js检查它是否正在等待 对于任何异步I/O或计时器,如果有 没有

    我听不懂第四颗子弹。尤其是行“节点将在适当的时候在此阻塞。

    在什么情况下节点会阻塞自身以及为什么会阻塞?

    如本节所述,轮询阶段计算节点阻塞和等待I/O的时间。 所以,在这个阶段,若在定时器阶段计算的时间阈值被越过,它将执行来自定时器的回调

    如果未超过计时器阈值,并且轮询队列不为空,则事件循环将迭代其回调队列,同步执行回调,直到队列耗尽或达到系统相关的硬限制

    如果轮询队列为空,则会发生以下两种情况之一:

    1-如果setImmediate()已计划脚本,则事件循环将结束轮询阶段并继续到检查阶段以执行这些计划脚本

    2-如果setImmediate()未计划脚本,事件循环将等待回调添加到队列中,然后立即执行它们。