事件迴圈 EventLoop 的學習總結

2022-08-11 19:42:16 字數 1307 閱讀 5317

在學習eventloop之前,我們需要複習一下js的單執行緒和非同步。

雖說js是單執行緒的,但是在瀏覽器和node中都做了相應的處理。如瀏覽器中的web workers(工作執行緒),node中的child_process(子程序)。它們的出現對大量計算的分解起到了促進作用。

當程序啟動時,node會建立乙個tick迴圈,每個tick迴圈通過內部的觀察者來檢視是否有事件需要處理,如果有就取出事件和它相關的**函式去執行,執行完以後就進入下乙個迴圈,如果不再有就退出程序。

在瀏覽器中把非同步事件放到工作執行緒中,避免阻塞主線程ui的渲染
console.log('程序開始')

console.log('程序結束')

從結果可以看出三種非同步處理不阻塞主線程**的執行,而ajax、fetch、settimeout根據**處理結束的先後來執行**函式。
node中的事件迴圈根據觀察者的優先順序來執行,同乙個迴圈內的process.nexttick -> settimeout -> setimmediate
settimeout(() => , 0)

setimmediate(() => )

})setimmediate(() => )

process.nexttick(() => , 100)

console.log('nexttick1')

})process.nexttick(() => )

console.log('正常執行')

事件迴圈的執行特點,源於利用單執行緒,遠離多執行緒死鎖、狀態同步等問題;利用非同步讓單執行緒遠離阻塞,以更好的使用cpu。

事件迴圈(event loop)

1.執行的順序 同步任務先執行,等同步任務執行完畢 非同步等待主線扔去清空 主線任務清空之後,進入任務佇列,開始從任務佇列進入到主線程。2.同步 和非同步 的執行書序 同步 是從上往下依次執行。非同步 的執行需要根據情況而定,因為在事件迴圈中,又將 分為巨集任務和微任務。3.巨集任務和微任務 在現實...

js事件迴圈 事件輪詢 event loop

總結了網上的一些有關event loop的資料 雖然負責解釋和執行js 的執行緒只有1個,但是瀏覽器內部還有其他執行緒來專門負責非同步任務的,比如定時器,ui,事件,網路等專門執行緒來負責相關任何的處理。step1 主線程讀取js 此時為同步環境,形成相應的堆和執行棧 step2 主線程遇到非同步任...

JS 事件迴圈機制(Event Loop)

js事件迴圈機制,最常用到的地方應該是做面試題,經常給出一段 讓你寫出console.log 順序,很傷腦經,死記題目過不久又忘了。了解js事件迴圈機制之後,可以很輕鬆的解決這類題目。js是單執行緒模式,但是又經常聽到 非同步 多執行緒 的概念,js中的 非同步 多執行緒 由事件迴圈機制現的 事件迴...