JavaScript 事件循環機制(Event Loop)

javascript從誕生之日起就是一門  單線程的  非阻塞的  腳本語言,單線程意味着,javascript代碼在執行的任何時候,都只有一個主線程來處理所有的任務,非阻塞靠的就是 event loop(事件循環),本文就講解下事件循環。

event loop它最主要是分三部分:主線程、宏隊列(macrotask)、微隊列(microtask)

js的任務隊列分爲同步任務和異步任務,所有的同步任務都是在主線程裏執行的,異步任務可能會在macrotask或者microtask裏面

主線程

就是訪問到的script標籤裏面包含的內容,或者是直接訪問某一個js文件的時候,裏面的可以在當前作用域直接執行的所有內容(執行的方法,new出來的對象等

宏隊列(macrotask)

  • script(整體代碼)
  • setTimeout
  • setInterval
  • setImmediate
  • I/O
  • UI render

微隊列(microtask)

  • process.nextTick
  • Promise
  • Async/Await(實際就是promise)
  • MutationObserver(html5新特性)

執行順序

1、先執行主線程

2、遇到宏隊列(macrotask)放到宏隊列(macrotask)

3、遇到微隊列(microtask)放到微隊列(microtask)

4、主線程執行完畢

5、執行微隊列(microtask),微隊列(microtask)執行完畢

6、執行一次宏隊列(macrotask)中的一個任務,執行完畢

7、執行微隊列(microtask),執行完畢

8、依次循環。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章