美文网首页
微任务和宏任务

微任务和宏任务

作者: 9月的甜橙子 | 来源:发表于2021-09-25 13:46 被阅读0次

JS是单线程的,可以把这个线程叫做主线程,主线程中包含宏任务队列和微任务队列,宏任务所在的队列就叫宏任务队列,微任务所在的队列就叫微任务队列。常见的宏任务有setTimeout``setInterval常见的微任务有new Promise().then()

宏任务的特点是:

  • 第一个宏任务队列中只有一个任务,就是执行主线程的js代码;
  • 宏任务队列可以有多个
  • 当前宏任务队列中的任务全部执行完以后会查看当前是否有微任务。如有则执行微任务

微任务的特点是:

  • 只有一个微任务队列
  • 当前宏任务队列中的任务全部执行完以后会查看当前是否有微任务。如有则执行微任务队列中的所有微任务

根据规范,事件循环是通过任务队列的机制来进行协调的。

一个 Event Loop 中,可以有一个或者多个任务队列(task queue),一个任务队列便是一系列有序任务(task)的集合;每个任务都有一个任务源(task source),源自同一个任务源的 task 必须放到同一个任务队列,从不同源来的则被添加到不同队列。setTimeout/Promise 等API便是任务源,而进入任务队列的是他们指定的具体执行任务。

JS分为同步任务和异步任务
同步任务都在主线程上执行,形成一个执行栈
主线程之外,事件触发线程管理着一个任务队列,只要异步任务有了运行结果,就在任务队列之中放置一个事件。
一旦执行栈中的所有同步任务执行完毕(此时JS引擎空闲),系统就会读取任务队列,将可运行的异步任务添加到可执行栈中,开始执行。

宏任务

script(整体代码)
setTimeout
setInterval
I/O
UI交互事件
postMessage
MessageChannel
setImmediate(Node.js 环境)

微任务

Promise.then
Object.observe
MutaionObserver
process.nextTick(Node.js 环境)

运行机制

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

refer to https://zhuanlan.zhihu.com/p/78113300


如果本文对您有帮助,请给我点赞哦~ 谢谢~

相关文章

  • 微任务和宏任务@小四@王云飞

    微任务和宏任务 微任务 和 宏任务 表示异步任务的两种分类。 微任务(microtask)和宏任务(macrota...

  • 宏任务和微任务

    [js 宏任务和微任务] .宏任务(macrotask )和微任务(microtask ) macrotask 和...

  • 宏任务 和 微任务

    宏任务: 当前调用栈执行的代码成为宏任务,(主代码块和定时器)也或者宿主环境提供的叫宏任务 这些任务包括: 渲染事...

  • 宏任务和微任务

    介绍这个之前, 建议先了解一下事件循环[https://www.jianshu.com/p/106867eee55...

  • 宏任务和微任务

    浏览器是多线程执行代码,渲染的。但是浏览器只给JS一个线程来执行,因此JS是单线程。因此代码都是同步执行的,但是J...

  • # 宏任务和微任务

    首先说明 首先在JavaScript中,有同步代码和异步代码.这点很清晰. 代码的执行优先级顺序是,同步代码执行优...

  • 微任务和宏任务

    JS是单线程的,可以把这个线程叫做主线程,主线程中包含宏任务队列和微任务队列,宏任务所在的队列就叫宏任务队列,微任...

  • 宏任务和微任务

    所谓微任务和宏任务 宏任务::常见的定时器,用户交互事件等等。可以理解是每次执行栈执行的代码就是一个宏任务。(宏任...

  • 2018-08-15 微任务 宏任务 MicroTask Mac

    微任务和宏任务 微任务(Microtask)宏任务(Microtask)process.nextTickPromi...

  • 浏览器的事件机制-Eventloop

    循环机制前,我们先要会区分:宏任务与微任务 宏任务Task与微任务Microtask JS中的宏任务和微任务的区别...

网友评论

      本文标题:微任务和宏任务

      本文链接:https://www.haomeiwen.com/subject/iuiugltx.html