【问题标题】:How setImmediate is different from setTimeout(fn, 0)setImmediate 与 setTimeout(fn, 0) 有何不同
【发布时间】:2018-04-23 12:57:14
【问题描述】:

setImmediatesetTimeout 所经历的所有阶段。

没有很好地解释所有阶段究竟 setImmediate 和 setTimeout 经历了什么,请参阅 nodeJS guide 一旦有阶段概述部分说 I/O 回调阶段负责 setImmediate 并再次在轮询和检查部分说检查阶段负责setImmediate。 所以我有点困惑。 IO/回调或检查或两者兼而有之。

谁能解释一下setTimeoutsetImmediate在事件循环中的生命周期以及它们是如何执行的。

【问题讨论】:

标签: node.js event-loop libuv


【解决方案1】:

setTimeout 回调在计时器阶段执行,而 setImmediate 回调在检查阶段执行。

由于定时器阶段先于检查阶段,所以 setTimeout(fn,0) 将在 setImmediate 回调之前执行。

文档也提到了它,下面我在阶段概述部分引用了轮询阶段,他们提到了异常。

poll:检索新的 I/O 事件;执行与 I/O 相关的回调(几乎所有回调都例外关闭回调,那些由计时器调度,以及 setImmediate());节点会在适当的时候阻塞在这里。

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2016-05-30
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多