node中setImmediate()、setTimeout(fn, 0) 、 process.nextTick()

文章类型:Javascript

发布者:admin

发布时间:2023-04-07

node提供的跟任务队列相关的方法,是传入一个回调函数,当同步事件执行完之后马上执行

执行顺序 process.nextTick()=>setTimeout(fn, 0)=>setImmediate()

(setTimeout和setImmediate执行顺序不确定,总体上setTimeout先执行概率大)

一:区别

1:setImmediate()=>插入到任务队列的最末尾,也不会造成阻塞,但不妨碍其他的异步事件

setImmediate(function(){
console.log("setImmediate");
});

2:setTimeout(fn, 0)=>插入入到 任务队列尾部。即使是 0,也有 4ms 的延时

setTimeout(function(){
console.log("setTimeout");
},0);

3:process.nextTick()=>插入到 当前执行栈的尾部,任务队列之前,最先执行

process.nextTick(() => console.log(2));

二:总结

1:setImmediate(),消耗的资源小,也不会造成阻塞,效率最低

2:setTimeout(),精确度不高,可能有延迟执行的情况发生,且因为动用了红黑树,所以消耗资源大

3:process.nextTick(),效率最高,消费资源小,但会阻塞CPU的后续调用