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。
下面是一个较老的图,大致显示了事件循环的一个循环中发生了什么:
虽然有些东西,如关于process.maxDepth
的注释在节点v0.11 + / iojs中不再是这种情况。
node.js中的事件循环(实际上是libuv)有几个阶段。 在每个阶段处理一些特定types的事件。 当所有的callback函数都被调用时,循环会进入下一个阶段: https : //github.com/libuv/libuv/blob/v1.x/src/unix/core.c#L314 。
这意味着一种types的事件不能抢占另一类事件。 基本上没有单个队列,而是每个阶段的队列。