文档对于 Node.js 如何处理 setTimeout 调度的调用不是很清楚:
Node.js makes no guarantees about the exact timing of when the callback will fire, nor of the ordering things will fire in. The callback will be called as close as possible to the time specified.
假设有一个过期的计时器。还有一些 I/O 事件等待处理。 Node.js 会选择在触发计时器之前先处理所有 I/O 事件吗?这就是 WM_TIMER 在 Windows 中的工作原理。我猜测 Node.js 可能也会有同样的行为。不然为什么会有setImmediate()呢?人们可以只使用 setTimeout() 且延迟时间为 0。
最佳答案
定时器当前在 I/O 处理程序之前进行处理。此外,如果您执行 setTimeout(fn, 0)
, Node 会为下一个时钟周期安排该函数。
这是一张较旧的图表,大致显示了事件循环的一个循环中发生的情况:
尽管一些事情,例如有关 process.maxDepth
的注释,在 Node v0.11+/iojs 中不再是这样。
关于node.js - Node.js 是否优先考虑 I/O 事件而不是 setTimeout()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28047918/