Node.js优先于setTimeout()的I / O事件吗?

关于Node.js如何处理由setTimeout调用的调用,文档并不十分清楚:

Node.js并不保证callback何时触发的确切时间,也不会触发sorting的事件。callback将尽可能接近指定的时间。

说有一个过期的计时器。 还有一些I / O事件正在等待处理。 在启动定时器之前,Node.js会select处理所有的I / O事件吗? 这是WM_TIMER如何在Windows中工作。 我猜Node.js可能会以同样的方式performance。 否则,为什么会有setImmediate()? 人们可以使用setTimeout()延迟0。

定时器当前在I / O处理程序之前被处理。 另外,如果您执行setTimeout(fn, 0) ,节点将安排下一个打勾的function。

下面是一个较老的图,大致显示了事件循环的一个循环中发生了什么:

node.js事件循环图

虽然有些东西,如关于process.maxDepth的注释在节点v0.11 + / iojs中不再是这种情况。

node.js中的事件循环(实际上是libuv)有几个阶段。 在每个阶段处理一些特定types的事件。 当所有的callback函数都被调用时,循环会进入下一个阶段: https : //github.com/libuv/libuv/blob/v1.x/src/unix/core.c#L314 。

这意味着一种types的事件不能抢占另一类事件。 基本上没有单个队列,而是每个阶段的队列。