setImmediate vs. nextTick的区别

参考:http://stackoverflow.com/questions/15349733/setimmediate-vs-nexttick

setImmediate 在已在事件队列的I/O事件触发之后发生,process.nextTick在事件队列之前,并且在当前函数结束之后发生。

因此,如果你打算打断长运行、使用递归的cpu任务,你可以使用setImmediate 而非process.nextTick来插入下一个迭代,否则任何I/O事件回调没有任何机会在迭代过程中被调用。

另外:


传递到process.nextTick的回调函数通常在执行事件流的最后被调用,因此最适合用于尽可能快的同步操作。如果未做检查,这将会消耗掉event loop,阻止I/O发生。setImmediates则按创建顺序插入队列,并且在每一次迭代过程中弹出。这与process.nextTick有很大不同,process.nextTick会在每一次迭代的时候执行process.maxTickDepth队列回调函数。setImmediate在触发队列回调函数之后会让步于event loop,以确保I/O不会被消耗掉。

你可能感兴趣的:(setImmediate vs. nextTick的区别)