专栏首页性能与架构JS如何实现多线程?

JS如何实现多线程?

单线程的问题

javascript是单线程执行的,在处理运算过程中,浏览器不能执行其它javascript脚本,UI渲染线程也会被挂起,从而导致浏览器进入僵死状态 例如执行经典的 Fibonacci(斐波拉契) 计算,这个递归运算比较耗时,我们就以此为例 代码

解决方法

如果把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)大数组处理

本文分享自微信公众号 - 性能与架构(yogoup),作者:杜亦舒

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-02-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux shell 实现HTTP服务

    需求场景 使用代理服务器 HAProxy 对 Mysql 做负载均衡是常用方案,为提高可用性,当某个 Mysql 出现问题时,例如服务器故障了,或者数据复制中断...

    dys
  • 微信抢红包实现方式

    抢红包流程 红包生成,数据库中创建红包信息,把红包的ID、数量放入缓存 用户抢红包,分为抢和拆两个动作,抢动作只是决定用户是否得到红包资格,如果抢到了,进入拆动...

    dys
  • 一个命令快速搭建 Mysql 主从复制

    Mysql Utilities 是一个 Mysql 的工具箱,里面有不少好用的小工具 其中的 mysqlreplicate 命令,可以让我们通过一个命令就能快...

    dys
  • 我所理解的Intent 和Intent-filter

    1.Intent Intent 是一个消息传递对象,可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包...

    非著名程序员
  • 信息论:毫米波通信中基于通道指纹的波束跟踪

    原文题目:Channel Fingerprint Based Beam Tracking for Millimeter Wave Communications

    李欣颖6837176
  • Symantec电子邮件系统分析(CVE-2017-6327)

    前些天买了shodan的会员玩的特别开心,直到某一天看到了这个东西。这是什么呢? ? 在百度一查原来是一个邮件系统的中间件叫电子邮件网关系统,说白了就是过滤邮...

    FB客服
  • Android Intents and Intent Filters(一)

    看过前面的几节教程的应该都会留意到一个很重要的东西,那就是Intent。Intent是什么呢?我们都知道Android有四大核心组件 Activity、Serv...

    飞雪无情
  • 【DB笔试面试667】在Oracle中,贵公司的数据库有多大?大一点的表有多大?有多少行?

    对于数据库的大小,需要注意的问题是数据库的大小不能以表空间的分配大小而论,而应该以表空间的占用空间大小而论,并且需要减掉SYSTEM、SYSAUX、TEMP和U...

    小麦苗DBA宝典
  • 【内幕】华为发布全球首款AI移动芯片,NPU疑为寒武纪1A处理器

    【新智元导读】9月2日,华为在德国 IFA 2017 现场重磅发布全球首款麒麟 970移动计算平台,引起业界广泛关注。华为在发布会现场没有透露的是:其背后的 A...

    新智元
  • SDN之NOS概述

    网络操作系统(NOS)是一个用于配置和控制白盒交换机网络的平台,其核心职责是监控交换机的状态(例如,检测端口和链路故障),维护反映当前网络状态的拓扑的全局视图,...

    SDNLAB

扫码关注云+社区

领取腾讯云代金券