js解决单线程之路 - worker的使用分析

news2024/9/23 9:23:36

写在前面

今天写一个关于实现多线程的东西,都知道js是一个单线程的语言,所谓的单线程就是一次只能做一件事,多线程就是一次可以做很多件事,当然目前我们的电脑等设备很少会有单线程了,比如我们的电脑一般都是标的6核12线程,这句话的意思就是一个核心有两个线程,也就是可以同时做两件事,那么一般的情况下如果我们每次只做一件事的话是效率很低的,但是因为历史原因,js本身又是一个单线程的语言,所以后来js就用一些方法来进行模拟多线程任务,进而来更好的适应当前环境下的一些硬件需求,今天我们讲的worker就是js用来处理多线程的一种解决方案,好的,废话不多说了,下面我们简单的看一下他的用法,相信以后可以对你的编程有一些帮助,当然我也会说一下他的优缺点,以便于我们更好酌情使用,毕竟这个东西也不是说一定可以提高你的运行效率,他也是分情况的

worker简介

使用菜鸟教程里面的一段话进行介绍:web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行

基本使用

  • worker.js

在这里插入图片描述

self是脚本自带的,可以直接在js中进行使用无需进行引入等操作

在这里插入图片描述

上面是他的基本使用,下面简单的介绍一下他的优势

  • 解决阻塞的问题?

  • 可以提高性能?

写一个例子进行验证一下

在这里插入图片描述

运行结果如下图

在这里插入图片描述

不过这里有一个点是值得注意的,就是他是一个一个运行的,也就是说他的 ** 运行时间是三个时间相加起来的,所以他的总时间其实是三个相加起来的时间,也就是大概4s的时间 ** ,中间如果有一个运行出问题了,那么后面的也就不会执行了,因为他们是在一个主线程中运行的,比如我在中间的函数中改错一个形参,

在这里插入图片描述

如下图

在这里插入图片描述

下面我们使用worker的写法运行

  • dg1.js

在这里插入图片描述

  • dg2.js

在这里插入图片描述

  • dg3.js

在这里插入图片描述

  • index.html

在这里插入图片描述

运行结果

在这里插入图片描述

这里需要注意的是,这个结果是同时出现的,也就是说他一共用了2.3秒的时间大概

下面我们将第二个的函数改错一个形参,看一下运行结果

在这里插入图片描述

总结

通过上面的例子我们大概可以得到一个结论和使用的一些建议:

结论:通过主线程进行统一运行比较高负荷的程序的时候,会导致运行比较缓慢,如果运行的过程中出现了问题,那么后续的程序运行会受到影响,所以这里从提高运行效率上,使用worker是可以解决这个运行阻塞的问题,从运行时间上看,也是有一定提高的,但是我并没有绝对的说是提高的,毕竟次线程的运行能力是不如主线程的,从上面的例子可以看出来,虽然是一个2.3s一个是4s,但是单个运行时间比较的时候,会发现,其实主线程的运行时间是比较短的,这个程序还不是很明显,你们自己可以测试一下,我们只是通过比较总用时进行判断他可以时间上提高运行效率,因为new Worker的实例也是需要时间消耗的,当然也不排除我的设备硬件能力的问题

建议: 我们在写程序的时候,如果有一个线程是需要独立出来的,和主业务关系不大的,但是又担心他会阻塞的时候,可以将该程序使用次线程进行处理,单个的时间可能会降低,但是不会造成运行阻塞的问题,那么另一个建议就是不要乱用,因为很多的业务都是相互引用的,这个时候就会出现异步运行的时候,上一个进程还有没结束,但是下一个进程已经开始运行了,但是后一个进程还需要上一个进程的返回结果,这个时候会导致程序运行bug

写在最后

以上就是关于worker的基本使用和注意事项,博主能力有限,写的不好的地方可以随时指出,鄙人看到会及时纠正,感谢!

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

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

相关文章

stm32f103zet6的GPIO基础知识

IO数量 16*7112个,GPIOA~GPIOG7组,共144个引脚 IO模式 很多IO口既可以做为输入,也可以做为输出 输入模式 VSS指的是地,VDD是高电平, MOS英文全称为Metal-Oxide-Semiconductor。 意思为金属-氧化物-半导体,而拥有这…

Python画一棵茂盛的分形树

文章目录前情回顾添加分岔茂盛的分形树前情回顾 上次画了一棵分形树:用Python画一棵分形树,得到的图如下 发现看的人还是挺多的,但没什么人点赞,这说明我能给大家画分形树,大家很高兴,但这棵树太秃了&…

[附源码]Python计算机毕业设计调查问卷及调查数据统计系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

在Ubuntu上搭建Nexus服务

介绍 Nexus:Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。如Android远程仓库依赖,Java服务端应用程序依赖等,都很方便。 Docker方式 准备 ubuntu上已经安装docker,docker安…

20221218解决在Ubuntu18.04下编译Firefly的Core-3588J出现lz4的问题

20221218解决在Ubuntu18.04下编译Firefly的Core-3588J出现lz4的问题 2022/12/18 15:37 解决方法:编译最新的lz4的dev分支! https://wiki.t-firefly.com/zh_CN/Core-3588J/android_compile_android12.0_firmware.html Core-3588J产品规格书 3. 编译 Andro…

Bootstrap5 小工具

Bootstrap 5 提供了很多有用的类来帮组我们快速实现效果&#xff0c;不需要重复写一些 CSS 代码。 背景颜色 设置不同元素的背景颜色时&#xff0c;需要通过 .text-* 类来设置匹配的文本颜色&#xff1a; 实例 <div class"p-3 mb-2 bg-primary text-white">.…

跟老韩学JAVA——IDEA基本使用和快捷键

1. IDEA介绍 2.IDEA下载和安装 这个博主的下载安装介绍的很详细了&#xff0c;我就不过多介绍了 3.IDEA的基本使用 1&#xff09;修改字体大小 File -> Settings -> Editor -> Font -> Size 2)修改字体变粗 3)修改背景颜色 4) 修改菜单栏字体大小 5&#xff…

滑动窗口思想练习题

文章目录1. 找到字符串中所有字母异位词做法一&#xff1a;采用两个数组分别记录字符出现频次做法二&#xff1a;采用diff记录s和p字符串中字符的频次差2. 串联所有单词的子串个人理解&#xff0c;如有异议&#xff0c;欢迎指正&#xff01;1. 找到字符串中所有字母异位词 题目…

XiaoMi手机MIX 2S线刷固件和刷入Recovery

mix 2s 固件下载地址 https://web.vip.miui.com/page/info/mio/mio/detail?postId4865868&app_versiondev.20051 miflash线刷工具下载地址 https://miuiver.com/miflash/ 安装miflash线刷工具 点击安装驱动 打开miflash 手机关机按音量下加开机键进入bootloader&#xf…

Spring boot整合rocketmq(windows)

目录 1.环境搭建 2.命名服务器和业务服务器的启动 3.名词说明 4.执行步骤 5.示例 1.导入依赖 2.配置(至少指定下面两个) 3.代码 6.常见问题 1.环境搭建 下载地址&#xff1a;https://rocketmq.apache.org/解压缩进行安装&#xff0c;默认服务端口&#xff1a;9876 环…

执行 select ... for update 语句,如果查询条件没有索引字段的话,是加行锁还是加表锁?

大家好&#xff0c;我是小林。 昨天在群里看到大家在讨论一个 MySQL 锁的问题&#xff0c;就是执行 select … for update 语句&#xff0c;如果查询条件没有索引字段的话&#xff0c;是加「行锁」还是加「表锁」&#xff1f; 如果你做过这个实验的话&#xff0c;你会发现执行…

数据结构刷题训练营1

开启蓝桥杯备战计划&#xff0c;每日练习算法一题&#xff01;&#xff01;坚持下去&#xff0c;想必下一年的蓝桥杯将会有你&#xff01;&#xff01; 笔者是在力扣上面进行的刷题&#xff01;&#xff01;由于是第一次刷题&#xff01;找到的题目也不咋样&#xff01;所以&a…

SPRING-了解3-注解

IOC容器操作Bean 注解格式&#xff1a;注解名称(属性名称属性值,属性名称属性值) 放在类&#xff0c;方法&#xff0c;属性都可以 目的&#xff1a;简化XML配置 对象创建四大注解 1&#xff09;用的位置不是强制的 Component 最普通 Service 用在service层 Controlle…

接口测试(十)—— telnet和python代码测试dubbo接口

目录 一、传智健康项目介绍 1、项目描述 2、目标用户群体 3、项目模块 4、系统框架 二、Dubbo接口测试 1、RPC 2、Dubbo 3、查阅API文档 三、Telnet工具远程调用 1、启用telnet 2、telnet远程连接服务 3、telnet调用服务接口 四、python借助dubbo远程调用 1、安…

MySQL~JDBC

10、JDBC&#xff08;重点&#xff09; 10.1、数据库驱动 驱动&#xff1a;声卡、显卡、数据库 我们的程序会通过 数据库 驱动&#xff0c;和数据库打交道&#xff01; 10.2、JDBC SUN公司为了简化 开发人员的&#xff08;对数据库的统一&#xff09;操作&#xff0c;提供了…

剑指offer常见题 - 链表问题(一)

二叉树相关算法 链表相关知识点&#xff1a; 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 知识点一&#xff1a;链表由一系列结点&#xff08;链表中每一个元素称为结点&#xff09;组成&#xff0c;…

IDEA中如何使用Vim?看完本教程,让你用IDEA用到爽~(建议收藏)

目录 前言 Vim有什么特点&#xff1f; 为什么我要安利你在 IEAD 中使用Vim? Vim 一、环境配置 二、Vim的使用 2.1、方向键 hjkl 2.2、​编辑复制&粘贴 2.3、选择代码块并删除 2.4、块级删除 2.5、各种插入模式 2.5.1、以下是gif演示 2.6、jump&#xff08;解放鼠…

毕业设计 stm32智能电子秤系统 - 物联网 嵌入式 单片机

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 STM32F103C8T64.2 HX711压力传感器5 部分核心代码6 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&…

【OpenCV】Ubuntu配置OpenCV环境

1.从官网下载opencv包拷贝到虚拟机Ubuntu中&#xff0c; 虚拟机与主机传输文件可以采用 vmware tool、共享文件夹或者远程连接工具 2.解压得到对应版本号文件夹&#xff0c;我的是opencv-3.4.2 3.修改文件权限chmod -R 777 opencv-3.4.2 从win10进入Ubuntu中的文件压缩包解…

2022年云南省—信息安全管理与评估赛项竞赛规程

2022年云南省职业院校技能大赛 信息安全管理与评估赛项竞赛规程 一、赛项名称 赛项编号&#xff1a;No.11 赛项名称&#xff1a;信息安全管理与评估 英语翻译&#xff1a;Information Security Management and Evaluation 赛项组别&#xff1a;高职组 赛项归属产业&a…