Event loop的macro task和micro task

macrotask在一些文章中也被直接称为task。

一个宿主环境只有一个事件循环,但可以有多个任务队列。宏任务队列(macro task)与微任务队列(micro task)就是其中之二。

每次事件循环的时候,微任务优先级高于宏任务。

宏任务:script(全局任务), setTimeout, setInterval, setImmediate, postMessage, MessageChannel, I/O, UI rendering.
微任务:process.nextTick, Promise, Object.observer, MutationObserver.

微任务总 process.nextTick > promise.then

宏任务中,通常 setTimeout > setImmediate

setImmediate(): 是被设计用来一旦当前阶段的任务执行完后执行。
setTimeout(): 是让代码延迟执行。

如果没有在一个I/O周期执行,那么其执行顺序是不确定的。
如果在一个I/O周期执行,setImmediate总是优先于setTimeout执行。


更多请查看Jake Archibald关于macroTask和microTask的说明
https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/

猜你喜欢

转载自www.cnblogs.com/mengff/p/9224334.html