概念
-
宏任务:当前执行栈中执行的代码称为宏任务。(主代码块,定时器等等)。
-
微任务:当前宏任务执行完,在下一个宏任务开始之前需要执行的任务称为微任务。(promise.then,process.nextTick等等)。
-
宏任务的事件放在事件队列中,由事件触发线程维护;微任务的事件放在微任务队列中,由js引擎线程维护。
运行机制
-
在执行栈中执行一个宏任务。
-
执行过程中遇到微任务,将微任务添加到微任务队列中。
-
当前宏任务执行完毕,立即执行微任务队列中的任务。
-
当微任务队列中的任务执行完毕,检查渲染,GUI线程接管渲染。
-
渲染完毕后,js引擎线程接管,开启下一次事件循环,执行下一次宏任务(从事件队列中获取)。