Event Loop個人理解

看風景就發表於2016-12-27

javascript引擎單執行緒程式,其執行同步操作會按順序向下執行,執行非同步操作則使用事件迴圈模型。

js引擎執行緒遇到非同步操作,會將非同步操作交給對應的觀察者,

非同步操作包括:

dom事件 click,mousedown等
定時器 setTimeout,setInterval
IO 網路IO,檔案IO,其他IO(localStorage,cookie),IO操作會交給對應的執行緒池來執行

觀察者觀察非同步操作的狀態,在非同步操作執行完成,會將對應的非同步資訊(包括callback等)封裝成事件推入事件佇列。

js引擎執行緒會不斷的輪詢事件佇列,按照先進先出的原則讀取事件,若有事件,則取出,並執行其callback,執行一次callback的過程稱為一次迴圈(Tick),

執行完成,進入下一次迴圈(nextTick)。

若事件佇列為空,則js引擎執行空迴圈。

在瀏覽器中,js引擎與GUI引擎是互斥的,即js引擎會阻塞UI渲染,當js同步持續執行的時候,UI不會更新,會處於卡死狀態。 

相關文章