JS与多线程

Js的设计是单线程,html5引入webworker,它只能用于计算,不能修改DOM,无法造成视觉上的效果。然后webworker不能共享内存,没有线程同步的概念,因此JS还是单线程,可以把webworker当成另外的一种回调机制。

注意!JS的多线程是OS级别的。

Webworker使用方法:使用webworker做一个斐波那契计算,首先写一个fibonacci函数,如下所示:

function fibonacci(num){
if(num<=0) return 0;
if(num===1 || num===2) return 1;
var fn =1,
fn1 = 1,
fn2 = fn+fn1;
for(var i=4;i<=num; i++){
fn =fn1;
fn1=fn2;
fn2=fn+fn1;
}
return fn2;
}

把这个函数写到worker.js里面,webworker有一个全局的函数叫onmessage,在这个回调里面监听接收主线程的数据:

console.log("worker.js start");
onmessage = function(event){
var num = event.data;
var result = fibonacci(num);
postMessage(result);
}

计算完结果后,再把结果postMessage给主线程。
主线程先启动一个worker子线程,把数据发给它,同时监听onmessage,取到子线程给它传递的计算结果,如下main.js:

console.log("main.js start");
var worker = new Worker("worker.js");
worker.onmessage = function(event){
console.log("recieve result: "+event.data);
};
var num = 1000;
worker.postMessage(num);

然后在页面引入这个main.js的script就行了;

你可能感兴趣的:(JS与多线程)