从setInterval看js的单线程执行

js基于setTimeout与setInterval实现多线程 主要介绍了js基于setTimeout与setInterval实现多线程的方法,分析了多线程的原理与javascript模拟实现多线程的相关技巧,需要的朋友可以参考下 立即下载

简单的例子

在学习js的过程中发现了一个有意思的事情

下面的代码可以每隔三秒在屏幕上插入当前时间

setInterval(function () {
    document.write("<h1>" + Date() + "</h1>");
}, 3000);

在最开始界面如下

过了几秒钟,界面如下

可见setInterval将我之前的界面进行覆盖了,然后之后执行的时候也并没有覆盖原来的位置,而是在下面继续打印后三秒的时间

经过查询资料,发现js是单线程,当界面载入的时候会先按顺序执行js代码,之后会按照先后顺序执行setInterval和setTimeout的代码,在我的代码中体现为两个过程,首先是顺序执行我除了setInterval与setTimeout类似延迟执行的函数后,执行了setInterval,这其实是两个过程,所以就有了两种页面加载的样式了。

 

在我将代码改成如下时

setInterval(function () {
    document.write("<h1>" + Date() + "</h1>");
}, 3000);

setTimeout(function () {
    document.write(Date());
}, 4000);

显示如下,可见延迟执行的js函数为同一个过程。

JS为什么用单线程

浏览器中有三个常驻的线程,分别是JS引擎,界面渲染,事件响应。由于这三个线程同时要访问DOM树,所以为了线程安全,浏览器内部需要做互斥:当JS引擎在执行代码的时候,界面渲染和事件响应两个线程是被暂停的。所以当JS出现死循环,浏览器无法响应点击,也无法更新界面。现在的浏览器的JS引擎都是单线程的,尽管多线程功能强大,但是线程同步比较复杂,并且危险,稍有不慎就会崩溃死锁。单线程的好处不必考虑线程同步这样的复杂问题,简单而安全。

js多线程

即便是多线程,也一定要做到线程安全,做法是新开的线程不可以访问DOM。在HTML5中,引入了Web Worker这个概念。它能够在另外一个线程中执行计算密集的JS代码而不引起页面卡死,这是真正的多线程。

AJAX也可以做到js的多线程。

参考链接:https://www.w3school.com.cn/html5/html_5_webworkers.asp

参考链接

https://blog.youkuaiyun.com/qq_21930351/article/details/40515075

 

21、汽车喷漆目标区域识别:机器学习与深度学习的应用 本文探讨了机器学习与深度学习在汽车喷漆目标区域识别中的应用,重点利用卷积神经网络(CNN)提高喷漆效率并减少油漆浪费。通过构建和预处理包含多种汽车类型的数据集,采用ResNet-18、ResNet-50和MobileNet-v2等模型进行训练与评估,结果表明ResNet-50在准确率和鲁棒性方面表现最佳。研究还分析了数据裁剪、标签处理、网络架构差异以及光照和遮挡对识别效果的影响,并提出了系统实现流程。最后,文章展望了多传感器融合、模型优化和场景适应性等未来研究方向,为智能化喷漆工艺提供了技术参考。 阅读详情

相关推荐

Mplus实战:如何用潜在类别分析(LCA)快速搞定心理学数据分类?

本文详细介绍了如何运用Mplus软件进行潜在类别分析(LCA),以快速处理心理学数据并识别内部异质性群体。文章从数据准备、Mplus语法编写、模型拟合与选择,到结果解读与高级应用(如纳入协变量),提供了完整的实战指南,帮助研究者从变量视角转向个体视角,有效挖掘数据中的潜在子类别。

weixin_28318011的博客 409

JS高手技巧:为什么你应该用 setTimeout 来模拟 setInterval?

在一次搞懂-JS事件循环之宏任务和微任务中讲到过,setInterval 是一个宏任务。 用多了你就会发现它并不是准确无误,极端情况下还会出现一些令人费解的问题。

张宁乐的博客 748

Scipy优化踩坑实录:trust-constr和SLSQP约束定义到底差在哪?

本文深入解析了Scipy优化模块中trust-constr和SLSQP两种方法在约束定义上的差异。通过对比面向对象的trust-constr和字典式定义的SLSQP,揭示了它们各自的优势与适用场景,帮助开发者在有约束优化问题中选择合适的算法,提升计算效率与准确性。

weixin_42573113的博客 270

js基础之setTimeout与setInterval原理分析

基本原理 setTimeout(func, delay, args):设置超时调用,经过delay时间后,将func函数加入到执行队列中准备调用。如果队列为空,立即执行该函数,否则等待线程空闲再执行。 setInterval(func, interval, args):设置 ...

夕山雨的博客 6067

遥感卫星影像AI数据集格式规范详解、技术原理与数据生产全流程技术手册

本技术手册旨在系统性地梳理遥感卫星影像AI数据集的各类格式标准(涵盖VOC、COCO、YOLO及遥感专用DOTA格式等),深入剖析其背后的技术原理,并详细阐述数据生产的全过程,涵盖预处理、标注、质量控制及数据增强等关键环节。无论您是刚入门的算法工程师,还是资深的数据生产管理者,本手册都将为您提供详实的参考与指引。

panshengwu的博客 1126

mfcc总结,这个mel三角滤波器分组到底是如何起作用的呢?

先看fft频谱图(这是4096字节取样fft计算,横轴频率是从0到512,后边意义不大,未取,纵轴是振幅),那些我随便画的蓝色线,你有什么联想?: 再看,这绿色线,是否有一种上升后,便逐渐式微的感觉,都是三角形的,这或许也是mel当初和绝大多数人看到的: 如果在振幅上加上一条限制的黑线(振幅门槛限制),黑色线以下很多频率就没有意义了,你看,有用的频率连一半(512/2=256)都占不到...

ganggangwawa的博客 9908

setInterval函数线程问题

setInterval是JAVASCRIPT的一个函数,一定时间内触发一次动作;比如autoplayerid = setInterval("autoOpenInfowindow()", 5000); 但是每次打开一次就一定要关闭一次调用 clearInterval(autoplayerid); 之前我把setInterval放到一个函数里面,但是会重复调用这个函数,问题就出现了 我调用这个

aaa1117a8w5s6d的专栏 1571

微信小程序URL Link全解析:从生成原理到实战应用(附Java代码)

本文深入解析微信小程序URL Link的生成原理与实战应用。URL Link是微信官方提供的智能路由协议,通过中间页实现外部链接安全跳转至小程序指定页面。文章详细阐述了其权限模型、环境版本差异及跳转机制,并提供了包含令牌管理、异常处理和性能优化的健壮Java实现方案,助力开发者构建高可用的链接生成服务。

weixin_29327525的博客 1216

JavaScript单线程执行

1. 如何证明js执行是单线程的?  * setTimeout()的回调函数是在主线程执行的  * 定时器回调函数只有在运行栈中的代码全部执行完后才有可能执行 2. 为什么js要用单线程模式, 而不用多线程模式?  * JavaScript的单线程,与它的用途有关。  * 作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。  * 这决定了它只能是单线程,否则会带来很复杂的同步问题 3. 代码的分类:  * 初始化代码  * 回调代码 4. js引擎执行代码的基本流程  * 先执

zhou 589

14、多级快速多极子算法(MLFMA)详解

多级快速多极子算法(MLFMA)是一种高效加速矩阵向量乘法(MVM)的数值方法,广泛应用于电磁场积分方程求解中。该算法通过构建多级树结构,将MVM分解为近场直接计算和远场分组计算两部分,利用递归聚类、聚合-平移-分解三阶段处理远场相互作用,并结合采样、模式计算与优化策略,将计算复杂度从O(N^2)降低至O(N log N)。博文详细阐述了MLFMA的核心步骤、数学推导、计算复杂度及实际应用中的优化技术,如伽辽金方案改进、对称性利用和反插值方法,为大规模电磁问题的高效求解提供了系统性指导。

t8u9v0w1x的博客 241

你一直忽略的神器:离你最近的超强语音输入法(微信语音输入全攻略,支持全局混用)

你一直忽略的语音输入工具🎤 ,其实就在身边!无需额外软件,即可实现全局语音转文字⚡ 支持中英文混输,还能与其他输入法混合使用,聊天、办公都能高效完成,让你的输入效率轻松翻倍🚀

XiaoqiangClub的博客 903

#Js篇:单线程模式&&同步任务&&异步任务&&任务队列&&事件循环&&setTimeout()&& setInterval()

定义:是一种程序结构,用于处理任务队列中的任务。js运行时(浏览器)中存在一个主线程,事件循环负责不断的检查任务队列,如果任务队列中有任务,就将任务取出并执行。2、 常见的浏览器无响应—假死,往往就是因为某一段js代码长时间运行—比如死循环,导致整个页面卡在这个地方,其他任务无法执行。1、 只有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。定义:被引擎放在一边,不进入主线程、而进入任务队列的任务。定义:没有被引擎难挂起、在主线程上执行的任务。定义:用来存放异步任务的队列。

... 428

从 SM59 到 SPROXY,打通 ABAP 后端与 ES Repository 的代理生成链路

本文探讨了在SAP PI/PO项目中配置ABAP后端系统与ES Repository连接的关键步骤,重点解决ABAP Proxy生成时无法获取接口模型的问题。文章指出: 该配置本质是建立设计时通道,使ABAP系统能通过SPROXY访问ES Repository中的接口模型并生成代理类 配置核心是在SM59创建名为SAP_PROXY_ESR的HTTP连接(类型G),需确保: 目标路径为/rep 使用具备SAP_XI_IS_SERV_USER角色的服务账号 连接测试通过后仍需在SPROXY中验证完整功能 常见陷

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 57

setInterval()与setTimeout()计时器   JavaScript是单线程语言,但是它可以通过设置超时值和间歇时间值来指定代码在特定的时刻执行。超时值是指在指定时间之后执行代码,间歇

setInterval()与setTimeout()计时器   JavaScript是单线程语言,但是它可以通过设置超时值和间歇时间值来指定代码在特定的时刻执行。超时值是指在指定时间之后执行代码,间歇时间值是指每隔指定的时间就执行一次代码。   超时调用   超时调用使用window对象的setTimeout()方法,它接受两个参数:要执行的代码和以毫秒表示的时间(代码执行前的等待时间)。其...

zhanglianglily的博客 351

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

setTimeout 和 setInterval

异步编程当然少不了定时器了,常见的定时器函数有setTimeout、、。最常用的是setTimeout,很多人认为setTimeout是延时多久,那就应该是多久后执行。其实这个观点是错误的,因为 JS 是单线程执行的,如果前面的代码影响了性能,就会导致setTimeout不会按期执行。当然了,可以通过代码去修正setTimeout接下来看,其实这个函数作用和setTimeout基本一致,只是该函数是每隔一段时间执行一次回调函数。通常来说不建议使用。第一,它和setTimeout。...

无知小九的博客 451

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

setTimeout和setInterval无法按时执行

1.试解释下setTimeout和setInterval定时器无法按时执行的原因 JS是单线程,所以异步事件(比如鼠标点击和定时器)仅在线程空闲时才会被调度运行,代码执行时异步事件任务会按照将它们添加到队列的顺序执行,而setTimeout() 的第二个参数只是告诉JS再过多长时间把当前任务添加到队列中。如果队列是空的,那么添加的代码会立即执行;如果队列不是空的,那么它就要等前面的代码执行完了以后再执行。 2.为什么用setTimeout模拟setInterval会比较好 setInterval会漏执

前端阿玉博客 2255

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

昼猫笔记 JavaScript -- 异步执行|定时器真的定时执行?

本篇主要内容:异步、定时器引发的思考 预计阅读时间:8分钟 了解 我们都知道在js中定时器有两种 setInterval() 、setTimeout() setInterval():按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。 setTimeout():在指定的毫秒数后调用函数或计算表达式。 那么问题来了,...

weixin_44176774的博客 1524

JS执行顺序问题

一、JS——>单线程 JavaScript是一门单线程语言,在最新的HTML5中提出了Web-Worker,但JavaScript是单线程这一核心仍未改变。所以一切JavaScript版的”多线程”都是用单线程模拟出来的,一切JavaScript多线程都是纸老虎! 1.什么是单线程 通俗点说,就是代码在执行过程中,另一段代码想要执行就必须等当前代码执行完成后才可以进行。我们拿一段代码来解释...

qq_39436397的博客 299

JavaScript执行机制

本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我。 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序。因为javascript是一门单线程语言,所以我们可以得出结论: javascript是按照语句出现的顺序执行的 看到这里读者要打人了:我难道不知道js是一行一行执行的?还用你说?稍安勿躁,正因为js是一行一行执行的,所以我们以为js都是这样的: let

南乔几经秋、的博客 527

【JS】定时器和单线程模型

定时器 添加定时器功能 setTimeout() setInterval() 两者相同点 用法相同 — 两者不同点 隔一段时间执行 每隔一段时间执行 取消定时器功能 clearTimeout() clearInterval() 用法 function consoleLog(val) { console.log(val); } function conLog(){...

Zhouzhouzzz冲鸭 283

JavaScript 执行机制

这一次,彻底弄懂 JavaScript 执行机制 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我。 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序。因为javascript是一门单线程语言,所以我们可以得出结论: javascript是按照语句出现的...

qq_42164670的博客 223

php setinterval和settimeout,setTimeout和setInterval的区别你真的了解吗?

甚至可能会错误的把两个实现定时调用的函数理解成了类似thread一样的东西, 认为会在一个时间片内, 并发的执行调用的函数, 似乎很好很强大, 但其实并不是如此, 实际的情况是javascript都是以单线程的方式运行于浏览器的javascript引擎中的, setTimeout和setInterval的作用只是把你要执行的代码在你设定的一个时间点插入js引擎维护的一个代码队列中, 插入代码队列并...

weixin_42445810的博客 277

简单的理解js单线程和异步

js为什么是单线程的呢?为什么不把它变成多线程的语言,现在的多线程语言不是很流行吗?根据这几个问题,我们来一起了解一下js单线程和异步 一、为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。 JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。同时DOM渲染和js代码的执行共用一个线程,这决定了它只能

Fancy_vae的博客 435

一文入坑 JavaScript 执行机制

JavaScript执行机制 因为js是单线程的,所以代码是一行一行执行的 从此我们写代码: let a = 2; console.log(a) function b(){ //... } b() 然而实际上js是这样的: setTimeout(function(){ console.log('定时器开始啦') }); new Promise(function(resolve){ ...

没有翅膀的我们,只是随便认为不能飞而已 238

setTimeout 和 setInterval:看似简单,但你不知道的使用误区

在开发中,在大多数需要轮询定时器的场景下,使用递归的 setTimeout 相对更安全、更可控,使用 setInterval 时要做到心中有数,避免产生bug。

jj1245_的博客 342

浅析JS异步执行机制

前言 JS异步执行机制具有非常重要的地位,尤其体现在回调函数和事件等方面。本文将针对JS异步执行机制进行一个简单的分析。 从一份代码讲起 下面是两个经典的JS定时执行函数,这两个函数的区别相信对JS有一定基础的同学是十分清楚的。timeout仅仅只会执行一次,而interval则会执行多次。 setTimeout(function (args) { console...

qq_37438394的博客 159
上一篇: SSL/TLS协议学习笔记
下一篇: hexo+github博客搭建踩坑记录
fa1lr4in
博客等级 码龄9年 64粉丝 79原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值