- 队列 queen
1)Macro event queue : MacroTask
2)Micro event queue: MicroTaskMacroTask和MicroTask
JavaScript引擎对这两种队列有不同的处理,先把所有的任务分类
1)macroTask: setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering
2)microTask: process.nextTick, Promise, MutationObserver
- 每轮 Event Loop
! 注意: 主进程的代码也属于MacroTask
1) 会取出 Macro event queue 中的一个 MacroTask 出来执行——>
2)会从 Micro event queue 取出所有 Microtasks 执行——>
3)至此完成一轮 Event Loop,然后再重复 步骤 1)、2)
实际上:
1) all 主进程事件
2) all Microtasks
3) a MacroTask
然而对于怎么处理 macrotasks 和 microtasks 完全取决于引擎。
- 异步
每次碰到异步操作,就把操作添加到异步队列中。等待主进程为空 ,就去执行异步队列。执行完成后再回到主进程。