導航
1、微任務和宏任務
首先舉幾個典型的微任務和宏任務
微任務的代表
promise
nodejs中的process.nextTick
宏任務的代表
setTImeout
setInterVal
console.log(1) //主線程
setTimeout(() => { //宏任務
console.log(2)
}, 1000)
new Promise(resolve => { //主線程
resolve()
console.log(3)
}).then(() => { //微任務
console.log(4)
})
console.log(5) //主線程
//輸出順序 1、3、5、4、2
執行順序爲主線程–>微任務–>宏任務
2、EventLoop
(1)所有同步任務都在主線程上執行,形成一個執行棧(execution context stack)。
(2)主線程之外,還存在一個"任務隊列"(task queue)。只要異步任務有了運行結果,就在"任務隊列"之中放置一個事件。
(3)一旦"執行棧"中的所有同步任務執行完畢,系統就會讀取"任務隊列",看看裏面有哪些事件。那些對應的異步任務,於是結束等待狀態,進入執行棧,開始執行。
(4)主線程不斷重複上面的第三步。