Node.js版本0.10已于今天发布并引入 setImmediate
。该API的变化文档建议做递归时使用它nextTick
调用。
从MDN所说的来看,它与process.nextTick
。
什么nextTick
时候应该使用setImmediate
?什么时候应该使用?
简单来说,process.NextTick()将在事件循环的下一个计时执行。但是,setImmediate本质上具有一个单独的阶段,该阶段确保仅在IO回调和轮询阶段之后才调用在setImmediate()下注册的回调。
请参考此链接以获得更好的解释:https : //medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node-js-event-loop-and -its-metrics-c4907b19da4c
在答案中的注释中,没有明确指出nextTick从Macrosemantics转变为Microsemantics。
在节点0.9之前(引入setImmediate时),nextTick在下一个调用堆栈的开始处运行。
从0.9节点开始,nextTick在现有调用栈的末尾运行,而setImmediate在下一个调用栈的末尾运行
查看https://github.com/YuzuJS/setImmediate以获取工具和详细信息
setImmediate
如果要将函数放在事件队列中已经存在的任何I / O事件回调后面,请使用此函数。用于process.nextTick
将函数有效地放在事件队列的开头,以便在当前函数完成后立即执行。
因此,在您尝试使用递归分解长时间运行且受CPU限制的作业的情况下,您现在想使用setImmediate
而不是process.nextTick
将下一个迭代放入队列中,因为否则任何I / O事件回调都不会获得机会在迭代之间运行。
我建议您查看专用于Loop的文档部分,以更好地理解。从那里摘录的一些片段:
就用户而言,我们有两个呼叫类似,但是它们的名称令人困惑。
process.nextTick()在同一阶段立即触发
setImmediate()在
事件循环的以下迭代或“滴答”中触发
本质上,名称应互换。process.nextTick()比setImmediate()触发得更快,但这是过去的产物,不太可能改变。