使用 ingress 建立對外服務
阿新 • • 發佈:2022-03-06
單執行緒就意味著所有任務需要排隊,如果因為任務cpu計算量大還好,但是I/O操作cpu是閒著的,所以js就設計成了一門非同步的語言,不會做無畏的等待,任務可以分成兩種,一種是同步任務,另一種是非同步任務。
(1)所有同步任務都在主執行緒上執行,形成一個執行棧(execution context(stack))
(2) 主執行緒之外,還存在一個“任務佇列”,只要非同步任務有了執行結果,就在“任務佇列”之中放置一個事件
(3)一旦“執行棧”中的所有同步任務執行完畢,系統就會讀取“任務對列”,看看裡面有哪些事件,哪些對應的非同步任務
(4)主執行緒不斷重複上面的第三步
// setTimeout(()=>{ // console.log("setTimeout"); // },0) // Promise.resolve().then(()=>{ // console.log("promise"); // Promise.resolve().then(()=>{ // console.log("promise2") // }) // }) // console.log("main") 執行結果 main promise promise2 setTimeout
setTimeout(()=>{ Promise.resolve().then(()=>{ console.log("promise") }) },0) Promise.resolve().then(()=>{ setTimeout(()=>{ console.log("setTimeout") },0) }) console.log("main") 執行 結果 main promise setTimeout
I/0
主線 巨集任務 微任務 巨集任務 微任務 ....
事件迴圈:每執行完一輪巨集任務和微任務就叫做一環事件