瀏覽器中的Event loop 與 Node的 Event loop

瀏覽器中的Event loop 與 Node的 Event loop##

參考連接yuchengkai.cn/docs/fronte…

瀏覽器

  1. JS 是門非阻塞單線程語言,由於在最初 JS 就是爲了和瀏覽器交互而誕生的。若是 JS 是門多線程的語言話,咱們在多個線程中處理 DOM 就可能會發生問題。
  2. HTML5 標準規定setTimeout這個函數第二個參數不得小於 4 毫秒,不足會自動增長。
  3. 瀏覽器正確的一次 Event loop 順序是這樣的

    執行同步代碼,這屬於宏任務。html

    執行棧爲空,查詢是否有微任務須要執行瀏覽器

    執行全部微任務多線程

    必要的話渲染 UIfrontend

    而後開始下一輪 Event loop,執行宏任務中的異步代碼異步

Node

Node Event Loop

timer

timers 階段會執行 setTimeout 和 setInterval函數

一個 timer 指定的時間並非準確時間,而是在達到這個時間後儘快執行回調,可能會由於系統正在執行別的事務而延遲。oop

下限的時間有一個範圍:[1, 2147483647] ,若是設定的時間不在這個範圍,將被設置爲 1。線程

I/O

I/O 階段會執行除了 close 事件,定時器和 setImmediate 的回調cdn

idle, prepare

idle, prepare 階段內部實現htm

poll

poll 階段很重要,這一階段中,系統會作兩件事情

執行到點的定時器 執行 poll 隊列中的事件 而且當 poll 中沒有定時器的狀況下,會發現如下兩件事情

若是 poll 隊列不爲空,會遍歷回調隊列並同步執行,直到隊列爲空或者系統限制 若是 poll 隊列爲空,會有兩件事發生 若是有 setImmediate 須要執行,poll 階段會中止而且進入到 check 階段執行 setImmediate 若是沒有 setImmediate 須要執行,會等待回調被加入到隊列中並當即執行回調 若是有別的定時器須要被執行,會回到 timer 階段執行回調。

check

check 階段執行 setImmediate

close callbacks

close callbacks 階段執行 close 事件

而且在 Node 中,有些狀況下的定時器執行順序是隨機的

相關文章
相關標籤/搜索