首页 > 代码库 > nextTick setImmediate setTimeout(fn, 0)

nextTick setImmediate setTimeout(fn, 0)

  • setImmediate()属于check观察者,其设置的回调函数,会插入到下次事件循环的末尾。

  • process.nextTick()设置的回调函数,会在代码运行完成后立即执行,会在下次事件循环之前被调用,原文是 “the callback will fire as soon as the code runs to completion, but before going back to the event loop.”

  • process.nextTick()所设置的回调函数会存放到数组中,一次性执行所有回调函数。

  • setImmediate()所设置的回调函数会存到到链表中,每次事件循环只执行链表中的一个回调函数。

 

Node.js的特点是事件循环,其中不同的事件会分配到不同的事件观察者身上,比如idle观察者,check观察者,I/O观察者等等,事件循环每次循环称为一次Tick,每次Tick按照先后顺序从事件观察者中取出事件进行处理。

 process.nextTick()属于idle观察者, setImediate() 属于check观察者。在每一个轮询环检查中,idle观察者先于I/O观察者,I/O观察者先于check观察者。

 

setTimeout(fn, 0)  的方式比较浪费性能,(setTimeout的创建要涉及到创建红黑树等性能消耗), 用setImmediate()和process.nextTick()的操作相对比较轻量

nextTick setImmediate setTimeout(fn, 0)