多线程 webworker

作者: 六月太阳花 | 来源:发表于2017-01-02 21:15 被阅读0次

    多线程——webWorker
    1、单线程与多线程区别:
    单线程:前一个操作没做完,后一个没办法开始
    多线程:可以同时进行多个操作
    2、多线程:
    好处:充分利用cpu资源
    1.主线程:加载页面,渲染,css渲染,jsDOM树生成
    2.由webWorker创建出,进行一些计算
    3.子线程里面不能操作 DOM和BOM
    4.子线程里面不能再去创建子线程
    5.不能跨域
    6.主线程和子线程之间数据不是共享,每次都是复制一份数据

    主线程文件eg:

    <script>
    function fn(n){
        if(n==1 || n==2){
            return 1;
        }else{
            return fn(n-1)+fn(n-2);
        }
    }
    window.onload=function (){
        var oBtn1=document.getElementById('btn1');
        var oBtn2=document.getElementById('btn2');
        var oBtn3=document.getElementById('btn3'); 
        oBtn1.onclick=function (){
            alert(fn(48));
        };
        
        var oW=new Worker('fibo.js');//创建子进程
        oBtn2.onclick=function (){
            oW.postMessage(48);  //向子进程传输数据
            oW.onmessage=function (ev){//接收子进程传来的数据
                alert(ev.data);
            };
        };
        
        oBtn3.onclick=function (){
            oW.terminate();//结束子线程
        };
    };
    </script>
    </head>
    
    <body>
        <input type="button" value="点击测试" />
        <input type="button" value="主线程测试" id="btn1" />
        <input type="button" value="子线程测试" id="btn2" />
        <input type="button" value="结束子线程" id="btn3" />
    </body>
    

    子进程文件eg:

    function fn(n){
        if(n==1 || n==2){
            return 1;
        }else{
            return fn(n-1)+fn(n-2);
        }
    }
    this.onmessage=function (ev){//子进程接收父进程的数据
        this.postMessage(fn(ev.data));//子进程向父进程传输数据
    };
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    相关文章

      网友评论

        本文标题:多线程 webworker

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