【发布时间】:2019-01-15 22:40:29
【问题描述】:
阅读了几十篇描述 Node.js 事件循环的文章和文档,比如 Node.js 自己提供的一篇:https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
我简直无法理解:为什么事件循环需要多个阶段,每个阶段都有自己的回调队列?
所有的文档和文章都以“这个阶段做某事并执行用 X 或 Y 设置的回调”来描述循环的各个阶段,但从未真正解释过为什么首先需要这些单独的队列。
为什么setTimeout() 或setImmediate() 的回调或套接字关闭需要在与执行绝大多数回调的轮询阶段不同的时间点执行?
如果轮询阶段的回调队列在进入下一阶段之前已经耗尽,为什么不让一个队列因其他阶段执行的任何非队列相关操作而中断?
【问题讨论】:
-
几乎需要 Node.js 团队的长期成员来回答这个问题。 (已知一两个会发布 SO 答案。)
-
可能存在一些优先级问题,但这些不同的队列看起来更像是实现细节,而不是有意义的设计选择(通常有充分的理由将队列分开,例如便于清理)。
-
我是 Node 核心,我猜对了,但我也很感兴趣(出于历史原因)。我将在 node-dev 中 ping 核心,看看我们是否能得到答案:)
-
一般来说,我从来没有遇到过不需要某种优先通道的排队系统。 :-)
-
@BenjaminGruenbaum 你得到答案了吗?
标签: javascript node.js loops callback queue