node:event-loop & 宏任務 & 微任務

event-loop(事件輪詢)

代碼進入執行棧後會判斷當前代碼是同步任務仍是異步任務,若是是同步任務則會將任務調到主線程同步執行,若是是異步任務則會將任務調到異步隊列中。ajax

主線程同步任務執行完畢後,會檢測異步隊列中是否存在異步任務:異步

  1. 若存在異步任務則先檢測是否有定時器任務,若是有並時間到則執行定時器異步任務;
  2. 若不存在定時器任務或定時器時間未到則檢測是否存在io異步任務,如文件讀寫,ajax請求等。若存在則執行io異步任務;
  3. 若不存在io異步任務或已執行完畢io異步任務,則檢測是否存在setImmediate異步任務,若存在則執行該異步任務;
  4. 1,2,3條結束後從新判斷異步隊列中是否還存在未執行的異步任務,若存在,則從第一條開始檢測執行,若異步隊列未空,則結束。

宏任務 & 微任務

主線程中執行的同步任務又分宏任務與微任務。函數

宏任務包含:oop

  • 主體script代碼
  • setTimeout,setInterval函數
  • Promise

微任務包含:線程

  • Promise對象的then處理
  • process.nextTick

當同步任務中既包含宏任務又包含微任務的時候,執行順序是先執行宏任務,再執行微任務。對象

相關文章
相關標籤/搜索