美文网首页
JS与多线程

JS与多线程

作者: 努力与幸运 | 来源:发表于2018-08-08 13:54 被阅读9次

    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与多线程

          本文链接:https://www.haomeiwen.com/subject/tuatbftx.html