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()的操作相对比较轻量
时间: 2024-10-11 08:47:36