Event loop的macro task和micro task

看風景就發表於2018-06-25

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/

 

相關文章