浅谈javascript事件环微任务和宏任务队列原理

下面是关于“浅谈javascript事件环微任务和宏任务队列原理”的完整攻略:

什么是事件循环?

事件循环是 JavaScript 的一种机制,它用于控制JavaScript代码的执行顺序,确保异步任务得到预期的执行结果,保证 JavaScript 是单线程的运行环境。

当执行JavaScript程序时,JavaScript引擎首先会将同步任务压入执行栈中,然后执行栈中的任务按照顺序执行,如果执行过程中遇到了异步任务,会将异步任务回调函数挂起并注册到对应的任务队列中等待执行。JavaScript 引擎将同步任务执行完毕后,会依次轮询各个任务队列中的任务并将任务放入执行栈中,等待执行。

宏任务

宏任务是 JavaScript 执行模型中的概念,顾名思义,大的任务就可以称之为宏任务。例如:browser UI rendering、用户输入、setTimeout 和 setInterval 等。

宏任务通过 Event Loop 机制可以异步地等待、等到当前执行栈被清空后再进入执行栈。

示例代码:

console.log(1);
setTimeout(() => {
    console.log(2);
}, 0);
console.log(3);

输出结果为:1 3 2

执行顺序是按照函数调用顺序执行的,当执行 setTimeout() 函数时,会将该任务放入任务队列,由于是异步任务,因此不会阻塞执行栈的执行。当执行完 console.log(3) 后,执行栈为空,JavaScript 引擎会轮询任务队列并将任务放入执行栈中执行。此时,setTimeout() 函数的回调函数会被执行,程序会输出 2

微任务

微任务是 JavaScript 执行模型中的概念,大部分的异步任务都可以称之为微任务,例如:Promise、process.nextTick等。

与宏任务不同的是,微任务会在本轮事件循环的末尾执行,这就确保了宏任务和微任务之间的顺序关系。

示例代码:

console.log(1);
Promise.resolve('promise').then(data => console.log(data));
console.log(2);

输出结果为:1 2 promise

当调用 Promise.resolve() 时,会将该任务变成一个微任务,并将其放入微任务队列中。当执行完 console.log(2) 后,执行栈为空,JavaScript 引擎会检查是否存在微任务,如果存在,则会依次执行微任务队列中的所有任务,最后输出 promise

任务队列

任务队列其实就是一个数组,它存储了异步任务,并按照任务的到达顺序排列。事件循环的时候会在任务队列中查找任务并将任务放入执行栈中等待执行。

常见的任务队列包括以下几种:

  • 宏任务队列:setTimeout、setInterval、requestAnimationFrame、I/O、UI rendering
  • 微任务队列:Promise、process.nextTick

深入透彻掌握事件循环原理

JavaScript 的事件循环机制非常重要,能够掌握事件循环的原理可以帮助开发者更好的理解 JavaScript 异步编程机制。推荐阅读相关书籍或者文档进行深入学习。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈javascript事件环微任务和宏任务队列原理 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 2019年Linux运维趋势与规划展望

    2019年Linux运维趋势与规划展望 Linux运维是当前IT行业中非常重要的一个领域,随着技术的不断发展,Linux运维也在不断变化和发展。本文将介绍2019年Linux运维趋势与规划展望的完整攻略,包括背景介绍、趋势分析、规划展望、示例说明等。 1. 背景介绍 Linux运维是指对Linux系统进行管理、维护和优化的工作。随着云计算、大数据、人工智能等…

    云计算 2023年5月16日
    00
  • 这只猫在云端定居了?边缘计算在天猫精灵云应用上的落地实践

    IoT的概念早已飞入寻常百姓家,在你我的日常生活中发挥着“智能”作用。比如,智能家居、智慧照明、GPS 导航、手机计步器等。未来,随着用户和技术的延伸和拓展,物联网的信息交换和通信价值将会被继续放大。 那么问题来了,如此庞大的设备和信息量,如何进行管理和整合重组?如何高效准确智能地对用户需求和实际应用场景做出反应?如何让数据流动产生更大价值? 如何向着更智慧…

    云计算 2023年4月17日
    00
  • IaaS、PaaS和SaaS:云计算的三种服务模式 【转】 – 方斌

    IaaS、PaaS和SaaS:云计算的三种服务模式 【转】 2022-02-09 17:49 方斌 阅读(19) 评论(0) 编辑 收藏 举报 云计算是一种新的计算资源使用模式,云端本身还是 IT 系统,所以逻辑上同样可以划分为这四层。底三层可以再划分出很多“小块”并出租出去,这有点像立体停车房,按车位大小和停车时间长短收取停车费。因此,云服务提供商出租计算…

    云计算 2023年4月11日
    00
  • vivo 服务端监控体系建设实践

    经过几年的平台建设,vivo监控平台产品矩阵日趋完善,在vivo终端庞大的用户群体下,承载业务运行的服务数量众多,监控服务体系是业务可用性保障的重要一环,监控产品全场景覆盖生产环境各个环节。 作者:vivo 互联网服务器团队- Chen Ningning 本文根据“2022 vivo开发者大会”现场演讲内容整理而成。 经过几年的平台建设,vivo监控平台产品…

    2023年4月10日
    00
  • Docker Machine创建Azure虚拟主机

    Docker Machine创建Azure虚拟主机 Docker Machine是Docker官方提供的一个命令行工具,可以帮助用户在多种云平台上快速创建和管理Docker主机。本文将介绍如何使用Docker Machine创建Azure虚拟主机,并提供两个示例说明。 1. 准备工作 在使用Docker Machine创建Azure虚拟主机之前,需要完成以下…

    云计算 2023年5月16日
    00
  • Python实现读取文件的方法总结

    下面我就为您详细讲解 “Python实现读取文件的方法总结”的完整攻略。 1. read() 方法 read() 方法可以读取整个文件的内容,具体用法如下: with open(‘file.txt’, ‘r’) as f: content = f.read() print(content) 示例中,我们打开一个名为 file.txt 的文件并以只读模式打开,…

    云计算 2023年5月18日
    00
  • 区块链解析:什么是Metaverse(元宇宙)?下一个时代风口

    区块链解析:什么是Metaverse(元宇宙)?下一个时代风口 Metaverse(元宇宙)是一个虚拟的、基于区块链技术的世界,它是一个由多个虚拟现实世界组成的生态系统。Metaverse的概念最早由Neal Stephenson在他的小说《雪崩》中提出,现在已经成为了一个热门的话题。本文将详细讲解什么是Metaverse,以及它为什么成为了下一个时代的风口…

    云计算 2023年5月16日
    00
  • 基于curl数据采集之单页面采集函数get_html的使用

    标题:基于curl数据采集之单页面采集函数get_html的使用 介绍 在你的网站中,需要对外部网页数据进行采集,curl是一种非常强大的数据采集工具,可以有效地获取外部网页的内容。而get_html函数,则是在curl基础之上,实现对单个页面数据爬取的函数。 函数定义 function get_html($url, $timeout = 3) 参数$url…

    云计算 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部