事件循环机制(Event Loop)的基本认知

简介: 事件循环机制(Event Loop)的基本认知

一、什么是事件循环机制?

在介绍事件循环机制之前,我们要首先了解以下什么是事件循环机制,我们首先看下下面这段代码的执行顺序,正确的执行顺序应该是序号1>3>2

image.png

为什么是上面的顺序呢?

原因是JS引擎指向代码是从上往下执行的,所以首先会执行序号1这个语句,JS引擎会将这个语句放在调用栈当中,然后执行代码,将序号1打印在控制台当中,当这段代码执行完毕之后,便将这段代码从调用栈中移出去。然后开始执行后续的代码,此时setTimeout这段代码进入调用栈,这段代码,会调用Web API,2秒之后进入callback队列,此时JS引擎将setTimeout移出调用栈,继续执行后面的代码,所以屏幕上会先打印出序号1,3,此时eventLoop登场了,它会不断循环的访问callbackqueue,等2s之后Web API会将要执行的打印序号2这句话放入callbackqueue,eventLoop将callbackQueue中的内容放入调用栈,开始执行,然后屏幕上打印出序号2,这就是eventLoop的基本流程。

执行顺序图解

image.png

引出事件循环是什么

JS的运行机制就是事件循环!

二、JS的执行顺序是什么?

  1. JS是从上到下一行一行执行。
  2. 如果某一行执行报错,则停止执行下面的代码。
  3. 先执行同步代码,再执行异步代码

三、事件循环的执行过程

  • 同步代码,调用栈执行后直接出栈
  • 异步代码,放到Web API中,等待时机,等合适的时候放入回调队列(callbackQueue),等到调用栈空时eventLoop开始工作,轮询
  • 微任务执行时机比宏任务要早

image.png

  • 微任务在DOM渲染前触发,宏任务在DOM渲染后触发

四、微任务和宏任务的根本区别

image.png

  • 微任务是由ES6语法规定的
  • 宏任务是由浏览器规定的

五、事件循环的整体流程

  1. 先清空call stack中的同步代码
  2. 执行微任务队列中的微任务
  3. 尝试DOM渲染
  4. 触发Event Loop反复询问callbackQueue中是否有要执行的语句,有则放入call back继续执行

image.png

六、事件循环经典案例

image.png

参考资料

什么是Event Loop?

[JavaScript]什么是事件循环(Event Loop)?

相关文章
|
12月前
|
运维 监控 数据安全/隐私保护
管理 Docker Swarm 集群注意事项
【10月更文挑战第7天】
145 3
|
7月前
|
监控 数据库连接 测试技术
《深入数据库连接池:解锁其核心作用与配置奥秘》
在数字化时代,数据库连接池作为数据库访问架构中的核心组件,通过资源重用、提升响应速度、优化资源分配和防止泄漏等方式,显著提高系统性能与稳定性。其关键在于合理选择连接池库(如HikariCP、Apache DBCP等),并科学配置参数(如初始连接数、最大/最小连接数、超时时间等)。结合性能测试与监控优化配置,可构建高性能、高可靠性的应用系统,满足业务需求。
132 5
|
8月前
|
人工智能 自然语言处理 程序员
一文彻底搞定从0到1手把手教你本地部署大模型
Ollama 是一个开源工具,旨在简化大型语言模型(LLM)在本地环境的部署与使用。它支持多种预训练模型(如Llama 3、Phi 3等),允许用户根据设备性能选择不同规模的模型,确保高效运行。Ollama 提供了良好的数据隐私保护,所有处理均在本地完成,无需网络连接。安装简便,通过命令行即可轻松管理模型。适用于开发测试、教育研究和个人隐私敏感的内容创作场景。
2694 0
一文彻底搞定从0到1手把手教你本地部署大模型
|
存储 Kubernetes Cloud Native
【阿里云云原生专栏】云原生容器存储:阿里云CSI与EBS的高效配合策略
【5月更文挑战第29天】阿里云提供云原生容器存储接口(CSI)和弹性块存储(EBS)解决方案,以应对云原生环境中的数据存储挑战。CSI作为Kubernetes的标准接口简化存储管理,而EBS则提供高性能、高可靠性的块存储服务。二者协同实现动态供应、弹性伸缩及数据备份恢复。示例代码展示了在Kubernetes中使用CSI和EBS创建存储卷的过程。
471 3
探索Linux操作系统的内核模块
本文将深入探讨Linux操作系统的核心组成部分——内核模块,揭示其背后的工作机制和实现方式。我们将从内核模块的定义开始,逐步解析其加载、卸载以及与操作系统其他部分的交互过程,最后探讨内核模块在系统性能优化中的关键作用。
|
11月前
|
Ubuntu Linux 网络安全
Ubuntu 22.04 LTS有哪些新特性
Ubuntu 22.04 LTS有哪些新特性
|
分布式计算 Hadoop 测试技术
Hadoop格式化前备份数据
【7月更文挑战第22天】
262 7
|
机器学习/深度学习 人工智能 PyTorch
人工智能平台PAI 操作报错合集之机器学习PAI,用Triton Inference Server 22.05 部署模型,遇到SaveV3这个op的问题,如何解决
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
弹性计算 分布式计算 Hadoop
搭建Hadoop环境
本教程介绍如何在Linux操作系统的ECS实例上快速搭建Hadoop伪分布式环境。
13288 8
|
存储 消息中间件 缓存
性能优化的十种手段
性能优化的十种手段