JS如何实现多线程?
原创 2016-02-06 杜亦舒 性能与架构
单线程的问题
javascript是单线程执行的,在处理运算过程中,浏览器不能执行其它javascript脚本,UI渲染线程也会被挂起,从而导致浏览器进入僵死状态
例如执行经典的 Fibonacci(斐波拉契) 计算,这个递归运算比较耗时,我们就以此为例
代码
结果
fibonacci(3)
fibonacci(2)
fibonacci(1)
fibonacci(0)
fibonacci(1)
后续操作
可以看到,fibonacci执行完成后才能继续执行,fibonacci(3) 很快可以执行完,如果是 fibonacci(30) 就会很慢了,严重阻塞了其他代码
解决方法
如果把fibonacci计算放到另一个线程中执行,当前线程就可以继续执行,这就需要多线程的能力
Web Worker 是 HTML5 提供的一个javascript多线程解决方案,可以将一些大计算量的代码交由web Worker运行而不冻结用户界面
web worker有两个好处:快速、不阻塞浏览器响应
对于上面的示例,可以创建一个worker线程来执行fibonacci运算
代码
worker.js
结果
开始计算1
worker执行的时候继续执行
结果1用时:779
开启worker线程后,就不再阻塞当前线程了,并且可以开启多个worker线程,web worker很好的解决JS单线程模型的不足
使用场景
web worker不能操作DOM,适合运算型操作
例如:
(1)长文本格式化
(2)语法高亮
(3)图片处理
(4)图片合成
(5)大数组处理

posted on 2018-08-15 19:30 micwin 阅读( ...) 评论( ...)   编辑 收藏

转载于:https://www.cnblogs.com/chinanetwind/articles/9483517.html

JS如何实现多线程?相关推荐

  1. [ js ] 可否用多线程的思路,解决大数量数据的性能问题?

    js中也是有线程概念的,setTimeout,setInterval和ajax都是这样的例子,另起一个线程,时间上似乎是并行处理的.于是,我想是不是可以利用这个多线程的机制,优化一下大数量数据遍历时的 ...

  2. 【worker】js中的多线程

    因为下个项目中要用到一些倒计时的功能,所以就提前准备了一下,省的到时候出现一下界面不友好和一些其他的事情.正好趁着这个机会也加深一下html5中的多线程worker的用法和理解. Worker简介 J ...

  3. 如何查找历史线程阻塞原因_学习 Web Worker(js中的“多线程”)

    昨天部门例会,讨论开发的系统遇到的问题,遇到一个医保上传比较耗时的问题,解决方案提到了Web Worker,学习一波. 首先简单介绍一下什么是web worker.我们都知道在浏览器中javascri ...

  4. Node.js 中的多线程方案 Worker threads

    源代码: lib/worker_threads.js node:worker_threads 模块允许使用多线程并行执行JS代码.快速引用如下: const worker = require('nod ...

  5. js javascript 实现多线程

    https://www.cnblogs.com/haodawang/p/5967269.html https://www.cnblogs.com/panmy/p/5764507.html https: ...

  6. JS是如何实现多线程的

    今天看到一道面试题,问js如何实现多线程?下面来总结一下: 因为 JS是一种单线程语言,即使是一些异步的事件也是在JS的主线程上运行的.像setTimeout.ajax的异步请求,或者是dom元素的一 ...

  7. 【前端2】js:原始类型,运算符,调试,页面加载,轮播图,Bom(对象,时钟),Dom(全选全不选,省市级联,隔行/触摸换色,表单校验)

    文章目录 1.js两种引入:js最终要引入到html在浏览器中运行 2.js五大原始类型:undefined 3.js的运算符和流程控制:js不支持单&和单|性能低 4.案例_99乘法表:So ...

  8. [转] Node.js的线程和进程

    [From] http://www.admin10000.com/document/4196.html 前言 很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本 ...

  9. 理解Node.js的event loop

    为什么80%的码农都做不了架构师?>>>    关于Node.js的第一个基本概念是I/O操作开销是巨大的: 所以,当前变成技术中最大的浪费来自于等待I/O操作的完成.有几种方法可以 ...

最新文章

  1. NYOJ_16_矩形嵌套
  2. 如何获得Oracle系统性能统计? Oracle大型数据库系统在AIXUNIX上的实战详解 集中讨...
  3. guava-cache设计与实现
  4. 卷积神经网络 全连接层(稠密层)是什么?(全连接层就是每一个结点都与上一层的所有结点相连的网络层)
  5. Boost:bimap双图lambda表达式的测试程序
  6. tcpdump 用法
  7. python常用的绘图库_Python3绘图库Matplotlib(01)
  8. python做单元测试_如何使用python做单元测试?
  9. 法拉第未来宣布汉福德工厂获得最终生产使用资质
  10. mysql根据排序取前百分之二十_MySQL 性能优化 MySQL常见SQL错误用法
  11. Visual Studio 2010 实用功能总结 II
  12. pyspider all 只启动了_Python 爬虫:Pyspider 安装与测试
  13. DB2 SQL性能调优秘笈
  14. iOS 唤起第三方App
  15. Python 飞机航班案例分析
  16. 大数据预处理之数据清洗
  17. 抖音封禁3973个炫富账号,一股清流!
  18. 根据AD账号直接单点登录到第三方系统
  19. 2019暑假集训总结与记录
  20. socket协议基础知识

热门文章

  1. vue之组件传值 爷到孙 provide inject
  2. 斯德哥尔摩的照片七:城市漫步(中)
  3. LA 4394 刷字符串(区间dp)
  4. DIT和DIF的基2FFT算法
  5. 小帅功能软件测试经验总结
  6. 谷歌日志glog库的使用
  7. mmap函数和munmap函数
  8. RecyclerView调用notifyDataSetChanged()不起作用
  9. nmon和nmon analyser的网盘下载安装与使用
  10. sdh管理单元指针_SDH管理单元指针介绍.doc