Process.nextTick 和 setImmediate 的区别?

求解答
关注者
269
被浏览
67,763
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

先看两段代码,左边是setImmediate,右边是process.nextTick。然后再来看下两段代码的执行结果。所使用nodejs的版本是v0.10.26。

setImmediate的执行结果:

process.nextTick的执行结果:

在执行process.nextTick时,setTimeout永远是最后执行。而在执行setImmedia时,setTimeout是随机的插入在setImmediate的顺序中的。

好,来说下两个具体的不同吧。在具体说之前,先要明确一点,setTimeout中的callback是在nodejs的event loop中触发执行的。

  • process.nextTick的所要执行的代码回立即执行,并且是在返回nodejs的event loop之前。所以在process.nextTick的例子中,所有process.nextTick的函数会依次执行,执行结束之后,回到nodejs的event loop,然后再执行setTimeout。
  • 而setImmediate的执行呢,是被event loop触发的。setImmediate中要执行的函数被放入一个队列,每次迭代的时候,就会触发队列中当前第一个callback执行。所以执行顺序会是A-B-C-D-E-F-G。这样就防止了event loop被block住,允许其它的I/O或者timer的callback执行,所以setTimeout的执行会穿插在setImmediate的执行中。

以上是我所理解的process.nextTick和setTimeout。欢迎各位指出不足之处,谢谢。

附上,nodejs官方的说明: