JS 的线程、事件循环、任务队列简介

JavaScript事件循环与任务队列 阅读详情

JS 是单线程的,但是却能执行异步任务,这主要是因为 JS 中存在事件循环(Event Loop)和任务队列(Task Queue)

事件循环:JS 会创建一个类似于 while (true) 的循环,每执行一次循环体的过程称之为 Tick。每次 Tick 的过程就是查看是否有待处理事件,如果有则取出相关事件及回调函数放入执行栈中由主线程执行。待处理的事件会存储在一个任务队列中,也就是每次 Tick 会查看任务队列中是否有需要执行的任务。

任务队列:异步操作会将相关回调添加到任务队列中。而不同的异步操作添加到任务队列的时机也不同,如 onclick, setTimeout, ajax 处理的方式都不同,这些异步操作是由浏览器内核的 webcore 来执行的,webcore 包含上图中的3种 webAPI,分别是 DOM Binding、network、timer模块。
  onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任务队列中。
  setTimeout 会由浏览器内核的 timer 模块来进行延时处理,当时间到达的时候,才会将回调函数添加到任务队列中。
  ajax 则会由浏览器内核的 network 模块来处理,在网络请求完成返回之后,才将回调添加到任务队列中。
  
主线程:JS 只有一个线程,称之为主线程。而事件循环是主线程中执行栈里的代码执行完毕之后,才开始执行的。所以,主线程中要执行的代码时间过长,会阻塞事件循环的执行,也就会阻塞异步操作的执行。只有当主线程中执行栈为空的时候(即同步代码执行完后),才会进行事件循环来观察要执行的事件回调,当事件循环检测到任务队列中有事件就取出相关回调放入执行栈中由主线程执行。

任务(事件)队列是在事件循环中的,事件循环每一次 tick 便执行上面所述的任务(事件)队列中的一个任务。而任务(事件)队列是只能往尾部添加任务。
而 ES6 中新增的任务队列是在事件循环之上的,事件循环每次 tick 后会查看 ES6 的任务队列中是否有任务要执行,也就是 ES6 的任务队列比事件循环中的任务(事件)队列优先级更高。

javascript 同步任务、异步任务,单线程、多线程,执行栈、任务队列、任务队列的维护,宏任务、微任务,事件循环。 原文连接:https://blog.youkuaiyun.com/weixin_39788986/article/details/110130711 原文连接:https://blog.youkuaiyun.com/terrychinaz/article/details/112425039 阅读详情

相关推荐

Understand-Anything:AI驱动的代码知识图谱,实现项目全局洞察与高效导航

在软件开发中,理解复杂代码库的结构和依赖关系是提升开发效率的关键。传统代码阅读方式往往陷入局部视角,难以快速把握系统全貌。知识图谱技术通过将代码实体(如文件、类、函数)及其关系(调用、继承、依赖)可视化,为代码理解提供了全局视角。这项技术的核心价值在于将静态代码转化为动态、可交互的认知地图,极大降低了系统学习与维护成本。在实际工程中,它广泛应用于新成员快速入职、遗留系统梳理、架构影响分析等场景。本文介绍的Understand-Anything工具,正是基于这一理念,通过多智能体分析管道,自动构建代码的结构图

weixin_42615290的博客 886

js 执行顺序

a JS 是单线程的,但是却能执行异步任务,这主要是因为 JS 中存在事件循环(Event Loop)和任务队列(Task Queue)。 事件循环:JS 会创建一个类似于 while (true) 的循环,每执行一次循环体的过程称之为 Tick。每次 Tick 的过程就是查看是否有待处理事件,如果有则取出相关事件及回调函数放入执行栈中由主线程执行。待处理的

web_Scholar的博客 527

YOLO11实战 第001期-基于yolo11的CrowdHuman密集行人目标检测实战文档(yolo格式数据免费获取)

1.数据阶段在拥挤/遮挡场景下,使用crowdhuman数据集重训练后的yolo11,效果表现较好。crowdhuman数据集标签如下,有Head BBox、Visible BBox、Full BBox。如下图显示:数据集介绍CrowdHuman数据集是旷世发布的用于行人检测的数据集,图片数据大多来自于google搜索。CrowdHuman数据集数据量比较大,15000张,5000张,验证集4370张。训练集和验证集中共有470K个实例,约每张图片包含23个人,同时存在各种各样的遮挡。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 2168

【无标题】

1.基本数据类型-string:引号(“” 双引号,''单引号,``反引号/模板字符串—英文状态下横着的数字键盘1的左边)引起来的数据就是字符串类型。4.8.获取选择器 innerHTML将内容渲染到页面上,会覆盖之前的内容,会识别html标签。4.7write输出到页面上 body标签中,不会覆盖之前的内容,会识别html标签。在操作节点(增删改),节点/元素还没有创建成功,再去修改样式就会获取不到元素,报错。(1)引入外部JS文件的script中不可以写代码。比如:java是强类型语言,声明变量。

qq_42238110的博客 834

【农业生产系统模型】基于R语言APSIM模型进阶应用与参数优化、批量模拟实践技术

APSIM模型有Classic和Next Generation两个系列模型,能模拟几十种农作物、牧草和树木的土壤-植物-大气过程,被广泛应用于精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等诸多与农业生产和科研有关的领域。R语言是一门应用场景广泛、简单易学的程序语言,APSIM模型开发了许多R语言辅助包,在APSIM模型的气候、土壤、管理措施等数据准备,自动化模拟,参数优化和结果分析上都发挥着重要的作用。案例一:APSIM模型输入参数和土壤文件的制备。

2303_79243743的博客 1048

【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞

【代码】【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞。

weixin_41369892的博客 904

JS资料之异常处理

◆ 异常捕获 try{ //这里写可能出现异常的代码 }catch(e){ //这里的e就是捕获的异常对象 //可以在这里写,出现异常后的处理代码 } 异常捕获语句执行的过程为: 1、代码正常运行, 如果在try中出现了错误, try 里面出现错误的语句后面的代码都不再执行, 直接跳转到 catch 中 2、catch中处理错误信息,然后继续执行后面的代码 3、如果 ...

宅羽的博客 346

【数字图像相关-OpenCorr学习笔记】Epipolar search原理+代码解析

OpenCorr是一个开源C++库,用于研究和开发数字图像相关(DIC)技术它提供了2D和立体声DIC的全功能模块,以及数字体积相关(DVC)。最近正在学习OpenCorr,为了更深层次地理解ICGN,我打算浅浅剖析Opencorr的代码,学习的过程中写下这篇学习笔记,以后忘记了还能回来看看。同时,作为一名在读研究生,希望能得到社区大佬的指点,以及跟同学们一起学习进步。这一期主要讲解Eipipolar search的原理,并且附上部分代码解析。

ywyywyy的博客 1358

暂停JS向下执行

js中实现类似sleep的方法: 1. //js暂停函数 2. function Pause(obj,iMinSecond){ 3. if (window.eventList==null) window.eventList=new Array(); 4. var ind=-1; 5. for (var i=0;i<window.

qq463168421的专栏 4112

【YOLO26保姆级零踩坑教程】环境搭建+五大任务快速入门,一行代码实现检测/分割/姿态/OBB/分类(Win+Linux全适配)

YOLO26环境搭建与实战指南:零踩坑全适配 本文是YOLO26全栈技术专栏的入门篇,提供Windows/Linux双系统的纯实战环境搭建指南,主打零踩坑、全适配。YOLO26基于Ultralytics框架优化,无需编译源码或手动下载权重,原生支持多任务推理。 环境配置关键点: 必须安装Ultralytics 8.4.0及以上版本 支持CPU/GPU环境,推荐Python 3.8-3.11 提供清华源配置解决下载慢问题 安装步骤: CPU版:一键安装Ultralytics和OpenCV GPU版:匹配CUD

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 775

《一》:LBE,VR 大空间系列——场景环境需求解析

当前,大量 VR 体验活动在室内场地开展。因此,对于场地照明有特定要求:除天花板外,场地的所有表面均需有照明覆盖。这是为了保证玩家无论处于场地的哪个位置,地面与墙面都不会出现明显的影子。场地内不建议安装射灯或高强度的点光源,若已安装此类灯具,需使用柔光板进行遮盖。此外,要避免在阳光下使用 VR 设备台。参考图(请忽略其中Maker标签)

unitygroup的博客 944

js中return、continue、break

1.return 用的最多return一个值、return false/true; return只能出现在函数里,如果出现在上面实例里的for循环里就会报错,return出现在函数里的作用就是即使下面还有内容也不再继续往下执行了,最常见的就是在函数里判断参数是否符合要求, 如果不符合要求就不再继续往下执行: function checkHandle(str){ if(str.length > 5){ return false } } 2.continue .

前端-尔嵘 797

26、多级快速多极子算法(MLFMA)在大规模电磁问题中的应用

本文探讨了多级快速多极子算法(MLFMA)在大规模电磁问题中的高效应用。通过分层分区策略,MLFMA在分布式内存架构上实现了高效并行化,能够求解包含数亿未知数的复杂电磁问题。文章分析了介质球体、半球透镜、周期性结构和损耗介质阵列等典型案例,验证了MLFMA的高精度与广泛适用性。同时,MLFMA被应用于实际场景如隐身目标Flamme的外部共振分析和含分裂环谐振器的超材料设计,展示了其在航空航天、超材料和生物医学等领域的广阔前景。未来发展方向包括算法优化、多物理场耦合和实时计算,进一步拓展其应用潜力。

t8u9v0w1x的博客 119

JavaScript任务队列的顺序机制(事件循环)

同步与异步模式简介 我们知道,Javascript语言的执行环境是单线程(single thread)的。 所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。 这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应(假死),往往就...

happyqyt的专栏 8578

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JS 任务队列与事件循环

任务队列与事件循环笔记

weixin_57911482的博客 1800

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

什么是javascript的事件循环

本篇讲解什么是javascript的事件循环,事件循环的运行机制和执行顺序,理解事件循环对于编写高效、流畅的 JavaScript 代码至关重要。

Sherry Tian的博客 1975

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深入学习JS:任务队列和事件循环

目录一、问题二、js中的任务队列三、解决 一、问题 二、js中的任务队列 我们知道js是单线程的: JS作为浏览器的脚本语言,主要的用途就是与用户互动,操作dom,这也是根本原因决定JS是单线程的原因。 设想一个线程在DOM上添加元素,而另一个线程删除了这个节点,那这个时候应该听谁的? 三、解决 ...

小绵杨 3364

JavaScript的单线程与任务队列

js中任务分为同步任务和异步任务,同步任务是指进入主线程中排队执行的任务,异步任务指的是进入任务队列(事件队列)排队执行的任务,只有主线程中的任务执行完毕后才会调用任务队列的任务,并且遵循先进先出的原则,这也是js运行的机制,而这个过程不断循环被称为事件循环(event loop)

青春木鱼的博客 1384

JavaScript 深入解析:同步、异步、微任务、宏任务、消息队列与事件循环

4.定时器触发线程5.http异步线程6.EventLoop(事件循环)处理线程js是单线程的,也就是说,同一个时间只能做一件事在上面的例子中,所有代码都是同步执行的,longRunningTask会阻塞后续代码的执行,知道它完成,为了解决单线程带来的阻塞问题,js引入了异步编程模型。

m0_63472757的博客 1267

JS是单线程?一文搞懂异步实现原理(事件循环+任务队列)

摘要:本文解析了JavaScript单线程实现异步的机制。虽然JS引擎是单线程的,但浏览器环境提供了多线程支持,通过事件循环和任务队列实现异步调度。异步任务由辅助线程处理(如网络请求、定时器等),完成后回调放入任务队列,主线程空闲时执行。任务队列分为宏任务和微任务,微任务优先级更高。文章用办公室场景类比这一机制,并指出理解该原理有助于解决异步编程中的常见问题。掌握事件循环机制是学习高级异步方案的基础。

七叔的博客 1537

js事件循环机制(event loop) 同步任务 异步任务 宏任务 微任务 任务队列与调用栈

JavaScript 是单线程的,处理耗时任务时会阻塞程序执行。为解决这一问题,引入了异步任务机制。同步任务由 JavaScript 引擎直接处理,而异步任务则由宿主环境(如 Node.js、浏览器等多线程环境)执行。同步任务会立即加入执行栈并等待结果,而异步任务则在适当时机(例如定时器结束或点击事件发生时)被放入任务队列。当执行栈中的任务完成后,事件循环会检查任务队列中是否有待处理的任务,并将其逐一加入执行栈,循环往复,这便构成了事件循环机制。

qq_33546823的博客 1688

JavaScript底层原理(栈、堆、主线程、任务队列、事件循环机制)

栈是栈内存的简称,堆是堆内存的简称。顾名思义,内存是干啥的?内存就是用来存放数据的。

m0_67011584的博客 1075

JavaScript中的事件循环

JavaScript中的事件循环

太阳与星辰的博客 1214
上一篇: vue Router 路由守卫之beforeEach
下一篇: 前端性能优化处理方法---懒加载
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值