宏任务&微任务

宏任务
  • 我们可以将每次执行栈执行的代码当做是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)
  • 每一个宏任务会从头到尾执行完毕,不会执行其他。

主代码块,setTimeout,setInterval等,都属于宏任务

微任务
  • 我们已经知道 宏任务结束后,会执行渲染,然后执行下一个 宏任务,
  • 而微任务可以理解成在当前 宏任务执行后立即执行的任务。
  • 也就是说,当 宏任务执行完,会在渲染前,将执行期间所产生的所有 微任务都执行完。

Promise,process.nextTick等,属于 微任务。

总结:
  • 执行一个 宏任务(栈中没有就从 事件队列中获取)
  • 执行过程中如果遇到 微任务,就将它添加到 微任务的任务队列中
  • 宏任务执行完毕后,立即执行当前 微任务队列中的所有 微任务(依次执行)
  • 当前 宏任务执行完毕,开始检查渲染,然后 GUI线程接管渲染
  • 渲染完毕后, JS线程继续接管,开始下一个 宏任务(从事件队列中获取)


    image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容