博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Macrotasks 和 Microtasks
阅读量:6337 次
发布时间:2019-06-22

本文共 748 字,大约阅读时间需要 2 分钟。

基本知识

  1. 栈:先进后出
    函数a调用函数b,b调用函数c。执行函数a,a入栈,a调用b, b入栈, b调用c,c入栈,c执行,返回结果,弹出栈,依次类推,最后a出栈 === 》先进后出
  2. 指针:当函数执行完毕后

    • 基本数据类型会从 stack 中弹出
    • 对象、数组的值是存在于 heap(堆) 中的,stack 只弹出指针了他们对应的指针。而真正的值依然存在 heap 中,然后由垃圾回收器自动的清理回收。
  3. 异步任务是由浏览器执行的。当任务执行完之后,浏览器会将任务执行的结果和实现定义的回调函数放入主线程中。所以当主线程任务阻塞的时候,任务队列还是可以正常进行的。

macro tasks 和 micro tasks 分类

没有找到很官方的定义,这个与浏览器引擎相关,看浏览器引擎怎么定义任务的分类,以下是比较普遍的分类
  1. macro tasks: 定时器、http、IO操作(setTimeout, setInterval, setImmediate, I/O, UI rendering)
  2. micro tasks: process.nextTick, Promises, Object.observe(废弃), MutationObserver

执行顺序

在同一轮执行中,micro tasks优先级比macro tasks高
  1. 在执行同步任务过程中,碰到了macro tasks或者micro tasks,将其放入相对应的栈中。
  2. 先将所有的同步任务执行完
  3. 查看micro tasks,里面是否有任务,有的话,执行完所有的任务。
  4. micro tasks执行过后,查看macro tasks,查看里面是否有任务,如果有,执行第一个放入的任务。
  5. micro tasks执行完一个后,重复步骤1,2,3,4。

转载地址:http://oaaoa.baihongyu.com/

你可能感兴趣的文章
清远市第一中学大学城网
查看>>
环回接口(loopback interface)的新认识
查看>>
LINQ之路13:LINQ Operators之连接(Joining)
查看>>
数据结构--队列之C数组实现
查看>>
通过创建存储过程显示数据表的字段名和说明
查看>>
html5-css动画-2d
查看>>
字符串函数总结
查看>>
WAMP安装,期间提示丢失VCRUNTIME140.dll
查看>>
剑指offer 面试题43 n个骰子的点数 DP
查看>>
娱乐之佛像(转载)
查看>>
给一系列的div中的第一个添加class
查看>>
首尔最高旋转餐厅后厨一探究竟
查看>>
关于IOS的屏幕适配(iPhone)——资源适配
查看>>
pycharm安装pip
查看>>
LUA的编译、环境等
查看>>
fedora 修改home下的中文目录为英文目录
查看>>
[LeetCode] Number of Islands II
查看>>
分析linux中套接字的实现-------创建
查看>>
POJ3384:Feng Shui——题解
查看>>
软件测试面试准备
查看>>