EventLoop机制

news2025/8/6 10:08:13

JavaScript 是单线程的语言

JavaScript 是一门单线程执行的编程语言。也就是说,同一时间只能做一件事情。 

 单线程执行任务队列的问题:

如果前一个任务非常耗时,则后续的任务就不得不一直等待,从而导致程序假死的问题。

同步任务和异步任务 

为了防止某个耗时任务导致程序假死的问题,JavaScript 把待执行的任务分为了两类:

同步任务(synchronous)

  • 又叫做非耗时任务,指的是在主线程上排队执行的那些任务
  • 只有前一个任务执行完毕,才能执行后一个任务

异步任务(asynchronous)

  • 又叫做耗时任务,异步任务由 JavaScript 委托给宿主环境进行执行
  • 当异步任务执行完成后,会通知 JavaScript 主线程执行异步任务的回调函数

 同步任务和异步任务的执行过程

 结合 EventLoop 分析输出的顺序

import thenFs from 'then-fs'

console.log("a");
thenFs.readFile("./files/1.txt",'utf8').then((dataStr)=>{
    console.log("b")
})
setTimeout(()=>{
    console.log("c")
},0)
console.log("d");

正确的输出结果:adcb。

其中:

  •  a和 d 属于同步任务。会根据代码的先后顺序依次被执行
  •  c 和 b 属于异步任务。它们的回调函数会被加入到任务队列中,等待主线程空闲时再执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/394168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习和深度学习的综述

机器学习和深度学习的综述 1.1.1人工智能、机器学习、深度学习的关系 人工智能(Artificial Intelligence,AI)是最宽泛的概念,是研发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。由于这个定义…

代码随想录算法训练营第二十一天打卡 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

打卡第21天,继续二叉树,前几天终于补完了,感觉难度上来了。 今日任务 530.二叉搜索树的最小绝对差501.二叉搜索树中的众数 二叉树的最近公共祖先 530.二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root ,返回 树中任意两不…

计算机网络——路由、交换、子网篇

子网掩码 解释1 作者:纪言 链接:https://www.zhihu.com/question/56895036/answer/447915532 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 仅限ip4首先子网掩码这名字取得很好&#xff0c…

Java创建线程的方式只有一种:Thread+Runnable

Java创建线程的方式其实只有一种👨‍🎓一、继承Thread👨‍🎓二、实现Runnable接口👨‍🎓三、实现Callable接口👨‍🎓四、通过线程池创建👨‍🎓五、总结一般我…

SOLID 原则要这么理解!

什么是 SOLID 原则 SOLID 原则其实是用来指导软件设计的,它一共分为五条设计原则,分别是: 单一职责原则(SRP)开闭原则(OCP)里氏替换原则(LSP)接口隔离原则(…

Matter 系列 #9|乐鑫 Matter 预配置服务加速设备生产

乐鑫 Matter 系列文章 #9 目录 Matter 预配置服务 1. 设备认证 (Device Attestation) 2. 独特性 (Uniqueness) 3. 安全性 (Security) 联系我们​​​​​​​ 如今,物联网行业蓬勃发展,大量市场参与者正在积极地构建 Matter 智能设备。 乐鑫一直致…

盲盒开发:多元化设计、数字化销售、可持续发展

随着互联网的发展,盲盒成为了一种新型文化现象和玩具消费方式。它不仅满足了人们的消费需求,也引发了人们对玩具和收藏品的热爱和追求。目前,盲盒市场已经逐渐发展成为一个庞大的产业,其中海外盲盒市场更是异彩纷呈,备…

Git安装初始化及Gitee上传提交步骤

一、git安装git下载https://git-scm.com/download/win直接点击下一步“next”安装即可在桌面右键,选择 Git Bash Here 在 Git Bash Here 终端里输入 git --version 查看 git 版本,如图所示,说明 Git 安装成功。在终端设置用户签名邮箱git con…

windows7安装sql server 2000安装步骤 及安装过程中遇到的问题和解决方式

提示:文章写完后windows7安装sql server 2000安装步骤 及安装过程中遇到的问题和解决方式, 文章目录一、ms sql server 2000是什么?版本简介:**特点:****优点:**二、步骤1.下载安装包及Sq4补丁包2.安装 ms …

淘宝 APP 网络架构演进与弱网破障实践

作者:沈良炜 阿里大淘宝终端体验平台团队 面对移动互联网络下复杂多变的网络环境,如何提供更稳定可靠的请求性能,保障用户的加载浏览体验?本文将为大家分享淘宝APP统一网络库的演进。 一、引言 自2013年ALLIN无线到今天&#xff0…

ESP32设备驱动-土壤湿度传感器驱动

土壤湿度传感器驱动 1、土壤湿度传感器介绍 土壤湿度传感器由两个探头组成,用于测量水的体积含量。 两个探头让电流通过土壤,然后得到电阻值来测量水分值。 当有更多的水时,土壤会传导更多的电,这意味着电阻会更小。 因此,水分含量会更高。 干燥的土壤导电性差,所以当…

第八章.贝叶斯分析—贝叶斯定理朴素贝叶斯

第八章.贝叶斯分析 8.1 贝叶斯定理&朴素贝叶斯 贝叶斯主要应用与新闻分类,文本分类,评论分析。 1.数理统计学处理的信息 1).贝叶斯方法 关于统计推断的系统理论和方法,称为贝叶斯方法。 2).经典统计学 总体信息:当前总体样…

【2223sW2】LOG2

写在前面 好好学习,走出宿舍,走向毕设! 一些心路历程记录,很少有代码出现 因为鬼知道哪条代码到时候变成毕设的一部分了咧,还是不要给自己的查重挖坑罢了 23.3.2 检验FFT 早上师兄帮忙看了一眼我画的丑图&#xff…

什么是模块,Python模块化编程(入门必读)

Python 提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。通过这些强大的模块可以极大地提高开发者的开发效率…

深入理解Mysql索引底层数据结构与算法

索引是帮助MySQL高效获取数据的排好序的数据结构 深入理解Mysql索引底层数据结构与算法1.常见的数据结构讲解1.1 二叉树1.1.1 二叉树的定义1.1.2 二叉树示例1.1.3 Mysql为什么不使用二叉树进行数据存储1.2 红黑树1.2.1 红黑树的定义1.2.2 红黑树示例1.2.3 Mysql 为什么不适用红…

k8s学习之路 | k8s 工作负载 ReplicaSet

文章目录1. ReplicaSet 基础概念1.1 RS 是什么?1.2 RS 工作原理1.3 什么时候使用 RS1.4 RS 示例1.5 非模板 Pod 的获得1.6 编写 RS1.7 使用 RS1.8 RS 替代方案2. ReplicaSet 与 ReplicationController2.1 关于 RS、RC2.2 两者的选择器区别2.3 总结1. ReplicaSet 基础…

【三维几何学习】使用VTK对网格输入特征进行可视化

使用VTK对网格输入特征进行可视化引言一、全部代码二、可视化引言 使用python调用VTK库对网格的输入特征进行可视化,方便后续实验与分析 上图可视化的输入特征是热核特征HKS的第一个通道,也可对其他输入进行可视化数据集可参考1:三角网格(Triangular Me…

网上鲜花交易平台,可运行

文章目录项目介绍一、项目功能介绍1、用户模块主要功能包括:2、商家模块主要功能包括:3、管理员模块主要功能包括:二、部分页面展示1、用户模块部分功能页面展示2、商家模块部分功能页面展示3、管理员模块部分功能页面展示三、部分源码四、底…

LCMXO3L-640E-5MG121I【FPGA】LCMXO3L-640E-6MG121I采用65nm非易失性低功耗工艺设计

LCMXO3L-640E-5MG121I【FPGA】LCMXO3L-640E-6MG121I采用65nm非易失性低功耗工艺设计MachXO3设备系列是一个超低密度系列,支持最先进的可编程桥接和IO扩展。它具有突破性的IO密度和最低的每IO成本。设备IO功能集成了对最新行业标准IO的支持。121CSFBGA(明…

plg(Loki+Promtail+Grafana)监控nginx日志、messages日志监控平台

登录官网:loki官网Like Prometheus, but for logs. Contribute to grafana/loki development by creating an account on GitHub.https://github.com/grafana/loki/releases/ loki安装 ----root用户操作 ###创建用户 useradd loki passwd loki###创建安装目录 mkd…