JavaScript之EventLoop事件循環(huán)

EventLoop事件循環(huán)

參考鏈接
Tasks, microtasks, queues and schedules

微任務(wù)、宏任務(wù)與Event-Loop

執(zhí)行順序

  1. 進(jìn)入任務(wù)執(zhí)行棧
  2. 同步任務(wù)進(jìn)入主線程執(zhí)行, 異步任務(wù)進(jìn)入事件隊(duì)列
  3. 同步任務(wù)執(zhí)行完成后調(diào)取任務(wù)隊(duì)列中的任務(wù)進(jìn)入主線程執(zhí)行
  4. 執(zhí)行完成再次調(diào)取任務(wù)隊(duì)列, 直到?jīng)]有任務(wù), 退出


    EventLoop1.png

    EventLoop.png
  • Pending i/o callbacks
    執(zhí)行io, 文件操作,網(wǎng)絡(luò)操作等
  • Idle, prepare
    內(nèi)部操作
  • Poll
    輪循I/O操作,看是否有I/O的callback,如果沒有這會(huì)阻塞線程(有超時(shí)和基本檢測(cè))一段時(shí)間
    *check
    只處理setImmediate的回調(diào)函數(shù)
    *closeCallback
    專門處理一些close類型的回調(diào),如關(guān)閉網(wǎng)絡(luò)鏈接等

注意

  1. 異步任務(wù)要等主線程中的同步任務(wù)執(zhí)行完之后才會(huì)執(zhí)行, 如果主線程有耗時(shí)比較久的任務(wù), 異步任務(wù)執(zhí)行定時(shí)器什么的會(huì)有偏差
  2. 任務(wù)分為 宏任務(wù)和微任務(wù)

宏任務(wù)微任務(wù)

  1. 宏任務(wù)
  • 主體script, setTimeout, setInterval
  1. 微任務(wù)
  • Promise.then, process.nextTick

Promise()屬于宏任務(wù), then()及catch 屬于微任務(wù)

eventloop宏任務(wù)微任務(wù).png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容