EventLoop事件循環(huán)
參考鏈接
Tasks, microtasks, queues and schedules
執(zhí)行順序
- 進入任務執(zhí)行棧
- 同步任務進入主線程執(zhí)行, 異步任務進入事件隊列
- 同步任務執(zhí)行完成后調(diào)取任務隊列中的任務進入主線程執(zhí)行
-
執(zhí)行完成再次調(diào)取任務隊列, 直到?jīng)]有任務, 退出
EventLoop1.png
EventLoop.png
- Pending i/o callbacks
執(zhí)行io配阵, 文件操作誉帅,網(wǎng)絡操作等 - Idle, prepare
內(nèi)部操作 - Poll
輪循I/O操作,看是否有I/O的callback氧卧,如果沒有這會阻塞線程(有超時和基本檢測)一段時間
*check
只處理setImmediate的回調(diào)函數(shù)
*closeCallback
專門處理一些close類型的回調(diào)桃笙,如關閉網(wǎng)絡鏈接等
注意
- 異步任務要等主線程中的同步任務執(zhí)行完之后才會執(zhí)行, 如果主線程有耗時比較久的任務, 異步任務執(zhí)行定時器什么的會有偏差
- 任務分為 宏任務和微任務
宏任務微任務
- 宏任務
- 主體script, setTimeout, setInterval
- 微任務
- Promise.then, process.nextTick
Promise()屬于宏任務, then()及catch 屬于微任務
eventloop宏任務微任務.png