JavaScript与多线程的不解之缘!
前言
多线程
web workers
// worker.js
function fibonacci(n) {
function fib(n, v1, v2) {
if (n == 1)
return v1;
if (n == 2)
return v2;
else
return fib(n - 1, v2, v1 + v2);
}
return fib(n, 1, 1)
} // 通过onmessage回调函数接收主线程的数据
onmessage = function (e) {
// 通过e.data接收从主线程中传过来的数据。
var num = e.data;
var result = fibonacci(num);
// 通过postMessage向主线程传输结果。
postMessage(result);
}
var worker = new Worker('worker.js文件的url'); worker.onmessage = function (e) {
console.log("result: " + e.data);
}
worker.postMessage(100); worker.terminate();
数据通信
// Transferable Objects 格式
worker.postMessage(arrayBuffer, [arrayBuffer]); // 例子
var ab = new ArrayBuffer(1);
worker.postMessage(ab, [ab]);
内联Web Worker
<!DOCTYPE html>
<body>
<script id='worker' type='app/worker'>
function fibonacci(n) {
...
} // 通过onmessage回调函数接收主线程的数据
onmessage = function (e) {
// 通过e.data接收从主线程中传过来的数据。
var num = e.data;
var result = fibonacci(num);
// 通过postMessage向主线程传输结果。
postMessage(result);
}
</script>
</body>
</html>
var blob = new Blob([document.querySelector('#worker').textContent]);
var url = window.URL.createObjectURL(blob);
var worker = new Worker(url); worker.onmessage = function (e) {
console.log("result: " + e.data);
}
worker.postMessage(100);
线程同步
var mutext = new Mutext();
function changeDOM (style) {
mutext.lock();
document.getElementById('app').style = style;
mutext.unlock();
} // worker1
changeStyle({width: 100px}); // worker2
changeStyle({width: 150px});
var rwLock = new ReadWriteLock();
function changeStyle (style) {
rwLock.writeLock();
document.getElementById('app').style = style;
rwLock.unlock();
} function getStyle () {
rwLock.readLock();
var style = document.getElementById('app').style
rwLock.unlock();
return style;
}
作者: zhangwinwin来源:github
JavaScript与多线程的不解之缘!的更多相关文章
- JavaScript可否多线程? 深入理解JavaScript定时机制(转载)
说明:最近写 js 时需要用setinterval函数做定时操作,谁知道,刚开始后运行完好,但一段时间后他就抽风了,定时任务运行的时间间隔越来越短,频率加快,这是一个完全不能容忍的问题,带着一个可以出 ...
- 【JavaScript】吃饱了撑的系列之JavaScript模拟多线程并发
前言 最近,明学是一个火热的话题,而我,却也想当那么一回明学家,那就是,把JavaScript和多线程并发这两个八竿子打不找的东西,给硬凑了起来,还写了一个并发库concurrent-thread-j ...
- JavaScript可否多线程? 深入理解JavaScript定时机制
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...
- JavaScript 编写多线程代码引用Concurrent.Thread.js(转)
这是一个很简单的功能实现: <script type="text/javascript" src="Concurrent.Thread.js">&l ...
- javascript实现多线程 Concurrent.Thread.js
在这次我的项目中,因为前端要检测硬件加载并识别,再向后台请求发送数据,然后再返回的相应的配置文件!在这过程,要好时好几秒钟,严重影响体验效果,所以在网上靠看的方案,运用多线程去处理,这效果明显改善! ...
- js javascript 实现多线程
在讲之前,大家都知道js是基于单线程的,而这个线程就是浏览器的js引擎. 首先来看一下大家用的浏览器都具有那些线程吧. 假如我们要执行一些耗时的操作,比如加载一张很大的图片,我们可能需要一个进度条来让 ...
- javascript实现多线程提升项目加载速度
以前大家都认为js是单线程执行的,假如我们要执行一些耗时的操作,比如加载一张很大的图片,我们可能需要一个进度条来让用户进行等待,在等待的过程中,整个js线程会被阻塞,后面的代码不能正常运行,这可能大大 ...
- Javascript多线程引擎(二)
多线程Javascript解释器的大致架构 由于一个完整的解释器类似Google V8的解释器需要的工作量非常的大如需要实现如下的模块: 词法分析,语法分析器,AST转Byte模块,解释执行模块和JI ...
- 转载:JavaScript多线程编程简介
虽然有越来越多的网站在应用AJAX技术进行开发,但是构建一个复杂的AJAX应用仍然是一个难题.造成这些困难的主要原因是什么呢?是与服务器的异步通信问题?还是GUI程序设计问题呢?通常这两项工作都是由桌 ...
随机推荐
- Spring Cloud 各个组件角色简介
概述 SpringCloud 是一个全家桶式的技术栈,包含了很多组件:包含 Eureka.Ribbon.Feign.Zuul .Hystrix等.每个组件完成对应的功能 组件介绍 - 服务发现 Eur ...
- JVM 完整深入解析
工作之余,想总结一下JVM相关知识.以下内容都是针对于jdk1.7的. Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途 ...
- Object[] cannot be converted to String[]
原因: 你应该是想把List数组转 String数组吧! 然后想当然的调用list.toArray()方法. 结果 该方法返回的是Object[]数组,导致类型不匹配! 解决办法: 还在乖乖的用循环吧 ...
- Lambda 表达式实例
public class Java8Tester {/*** 语法 lambda 表达式的语法格式如下: (parameters) -> expression 或 (parameters) -& ...
- java内部类对象使用.this,.new
public class InnerClass { class Content { private int i; public int getVlaue() { return i; } } class ...
- Redis--部署操作
1.Redis 1.1 安装 当前ubuntu虚拟机中已经安装好了redis,以下步骤可以跳过 以后自己安装过程如下:redis下载链接:x 指的是版本号 http://download.redis. ...
- Shell 编程(一)
为什么学习 Shell 编程? 用 shell 来进行服务器的管理或维护 对于大数据程序员来说,需要编写 shell 来管理集群 Shell 是什么? Shell 是一个命令解释器,它为用户提供了 ...
- spark:reducebykey与groupbykey的区别
从源码看: reduceBykey与groupbykey: 都调用函数combineByKeyWithClassTag[V]((v: V) => v, func, func, partition ...
- 【C++】《C++ Primer 》第十八章
第十八章 用于大型程序的工具 大规模应用程序的特殊要求包括: 在独立开发的子系统之间协同处理错误的能力. 使用各种库进行协同开发的能力. 对比较复杂的应用概念建模的能力. 一.异常处理 异常处理(ex ...
- 从Java的字符串池、常量池理解String的intern()
前言 逛知乎遇到一个刚学Java就会接触的字符串比较问题: 通常,根据"==比较的是地址,equals比较的是值"介个定理就能得到结果.但是String有些特殊,通过new Str ...