EventLoop事件循環(huán)
參考鏈接
Tasks, microtasks, queues and schedules
執(zhí)行順序
- 進(jìn)入任務(wù)執(zhí)行棧
- 同步任務(wù)進(jìn)入主線程執(zhí)行, 異步任務(wù)進(jìn)入事件隊(duì)列
- 同步任務(wù)執(zhí)行完成后調(diào)取任務(wù)隊(duì)列中的任務(wù)進(jìn)入主線程執(zhí)行
-
執(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ò)鏈接等
注意
- 異步任務(wù)要等主線程中的同步任務(wù)執(zhí)行完之后才會(huì)執(zhí)行, 如果主線程有耗時(shí)比較久的任務(wù), 異步任務(wù)執(zhí)行定時(shí)器什么的會(huì)有偏差
- 任務(wù)分為 宏任務(wù)和微任務(wù)
宏任務(wù)微任務(wù)
- 宏任務(wù)
- 主體script, setTimeout, setInterval
- 微任務(wù)
- Promise.then, process.nextTick
Promise()屬于宏任務(wù), then()及catch 屬于微任務(wù)

eventloop宏任務(wù)微任務(wù).png

