Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js是否将I/O事件优先于setTimeout()?_Node.js - Fatal编程技术网

Node.js是否将I/O事件优先于setTimeout()?

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

关于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
的注释等内容