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的后续调用