事件队列

起因:js单线程,所有任务需要排队,但遇到耗时的操作(网络请求),就会堵塞后续的任务
解决:将耗时的操作放到异步任务队列,先执行同步的任务,等异步任务完成之后,通知主线程,再去执行

事件循环

  • 所有同步任务都在主线程上执行,形成一个执行栈
  • 主线程之外,还存在一个任务队列。只要异步任务有了运行结果,就在任务队列之中放置一个事件。
  • 一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
  • 主线程不断重复上面的第三步

MacroTask(宏任务)

script全部代码
setTimeoutsetIntervalsetImmediate
I/O、网络请求
UI Rendering

MicroTask(微任务)

Process.nextTick(Node独有)
Promise
MutationObserver

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

推荐阅读更多精彩内容