HTML5 worker 多线程

测试阅读器: FF 3.6
   测试效劳器: APACHE 2.2
  
   先让我们去梦想下假如WEB页里上能用多线程,那是否是意味那WEB页里逐步代替了客户端?
   html5 标准
  
   好了切进正题,那末WEB的多线程究竟是个虾米?
  
   从字里上去看,我们该当看的出他的完成是WORKER形式吧,甚么是WORKER形式?
   写过量线程的同窗该当比我更分明,年夜体的概念是:线程的创立由一个WORKER去决议,维护了一个线程池。
  
   接着,我们看下HTML5的多线扯菪甚么特性的:
  
   1. 正在线程中是不克不及操做DOM节面的(念要操做的话只能发送动静给worker创立者回调函数)
   2. 多线程的素质实际上是真实的体系线程
   3. 能利用setTimeout(), clearTimeout(), setInterval(),clearInterval()等函数
   4. 能停止IO操做(ajax)
  
   worker大抵的流程是如许子的:
      创立一个worker对象,绑定一个领受后台处理动静的办法 onmessage 战一个错误处理办法 onerror 。利用postMessage去通报数据,那个办法的参数是严厉的JSON对象。当后台处理完利用postMessage办法将数据传回前台,也便是onmessage的办法。
  
   接下去看例子:
  
   那个例子是页里通报一个数让后台减3,然后正在页里隐示
  
   挪用者:
  
[color=amily:Consolas,'Courier]

[JAVAscript] view plaincopy




< !DOCTYPE html>  
< html>  
    <head><title>worker Test</title>  
    <meta http-equiv="pragma" content="no-cache"></meta>  
    <meta http-equiv="expires" content="-1"></meta>  
    <meta http-equiv="cache-control" content="no-cache"></meta>  
    </head>  
    <body>  
        <div id="result" >zz</div>  
    </body>  
    <mce:script type="text/javascript"><!--  
        var worker = new Worker("work.js");   
        worker.onmessage = function(event){  
            document.write(event.data);  
        };  
        worker.onerror = function(event){  
            alert(event.message);  
        };  
        worker.postMessage(1);  
      
// --></mce:script>  
< /html>  

  
  
   上里的代码 创立了一个worker对象,然后初初化onmessage 战 onerror的办法,最初传进一个整数1
  
   接着我们去看下worker.js的内容
  
[color=amily:Consolas,'Courier]

[javascript] view plaincopy




onmessage = function(event) {  
    var data = event.data+3;  
    postMessage(data);  
};  

  
  
   因为work.js实邻Worker上下伪甭的,以是能间接利用 postMessage.
   一旦利用了那个办法,那末它以下的代码将没有执止,假如念要完成轮回的话,建议利用setInterval
   并且Worker出有锁的机造,多线程的同步问题只能靠代码去处理(好比界说旌旗灯号变量)
  
  
   那里借值得一提的是 worker挚ボ再有子worker 好比以下代码:
  
  
[color=amily:Consolas,'Courier]

[javascript] view plaincopy




var symbol = false;  
var obj ;  
var i = 0 ;  
onmessage = function(event) {  
        obj = event.data;  
        callWorker();  
};  
setInterval(function(){  
        if(i == 10) {  
                postMessage(obj);  
        }  
},100);  
callWorker = function(){  
        var worker = new Worker("sub.js");  
        worker.onmessage = function(event){  
                obj.a = event.data;  
                i = 10;  
        };  
        worker.onerror = function(event){  
                throw e;  
        };  
        worker.postMessage(1);  
};  

  
  
   sub.js
  
[color=amily:Consolas,'Courier]

[javascript] view plaincopy




onmessage = function(event){  
        postMessage(7);  
};  

   
  转载注明: http://www.shengshiyouxi.com   
    沙脉例子正在女的worker中挪用子worker:利用setInterval的办法等候i的值由子线程改动为10,然后返回迪瞥里
  
   那里借值得留意的办法有两个close 战 terminate
   close 是worker本人销誉本人
   terminate是worker创立者销誉worker
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值