Node.js是否将I/O事件优先于setTimeout()?
关于Node.js如何处理setTimeout安排的调用,文档并不十分清楚: Node.js不保证 回调将被触发,订购物品的命令也不会被触发。这个 将在尽可能接近指定时间的情况下调用回调 假设计时器过期了。还有一些I/O事件等待处理。Node.js会选择在触发计时器之前先处理所有I/O事件吗?这就是WM_定时器在Windows中的工作方式。我猜Node.js的行为可能与此相同。否则,为什么会有setImmediate()?人们可以使用延迟为0的setTimeout()。node.js(libuv)中的事件循环实际上有几个阶段。在每个阶段,处理某些特定类型的事件。调用所有回调时,循环将进入下一阶段:Node.js是否将I/O事件优先于setTimeout()?,node.js,Node.js,关于Node.js如何处理setTimeout安排的调用,文档并不十分清楚: Node.js不保证 回调将被触发,订购物品的命令也不会被触发。这个 将在尽可能接近指定时间的情况下调用回调 假设计时器过期了。还有一些I/O事件等待处理。Node.js会选择在触发计时器之前先处理所有I/O事件吗?这就是WM_定时器在Windows中的工作方式。我猜Node.js的行为可能与此相同。否则,为什么会有setImmediate()?人们可以使用延迟为0的setTimeout()。node.js(libuv
这意味着一种类型的事件不能抢占另一种类型的事件。基本上没有单个队列,而是每个阶段的队列 计时器当前在I/O处理程序之前处理。另外,如果执行
setTimeout(fn,0)
,则节点会为下一个勾号安排函数
下面是一个较旧的图表,大致显示了事件循环的一个循环中发生的情况:
尽管在节点v0.11+/iojs中不再有关于process.maxDepth
的注释等内容