真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

html5線程,html5多線程

html5 worker 怎么殺掉線程

這個(gè)我試過(guò),跟中止進(jìn)程類似,用API: 1.取線程中止碼:GetExitCodeThread((void *)thread-Handle,ExitCode); 2.強(qiáng)行中止: TerminateThread((void *)thread-Handle,ExitCode);如此而已 這是一個(gè)死循環(huán)線程:__fastcall MyThread::MyThread(bo...

成都創(chuàng)新互聯(lián)公司主要從事做網(wǎng)站、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)北侖,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108

如何使用html5的web workers開(kāi)啟多線程

HTML5-Web Workers實(shí)現(xiàn)多線程:

當(dāng)在 HTML 頁(yè)面中執(zhí)行腳本時(shí),頁(yè)面的狀態(tài)是不可響應(yīng)的,直到腳本已完成。雖然在JavaScript中有setInterval和setTimeout函數(shù)使javaScript看起來(lái)好像使多線程執(zhí)行,單實(shí)際上JavaScript使單線程的,一次只能做一件事情。

可以運(yùn)行以下示例,檢驗(yàn)js的單線程特性。

相關(guān)代碼請(qǐng)到github查看。

div id='container'/div

script

window.alert('hi');

setTimeout(function(){

var ul = document.createElement('ul');

var li = document.createElement('li');

var text = document.createTextNode('world');

var container = document.getElementById('container');

li.appendChild(text);

ul.appendChild(li);

container.appendChild(ul);

console.log('done!');

},2000);

/script123456789101112131415123456789101112131415

如果JavaScript是多線程,在彈出警告框兩秒后,頁(yè)面應(yīng)該出現(xiàn)一個(gè)li標(biāo)簽(內(nèi)容為world)。事實(shí)上因?yàn)镴avaScript是單線程,所以如果你不點(diǎn)擊彈出框的確定按鈕,world這個(gè)li永遠(yuǎn)也出不來(lái)。

點(diǎn)擊確定后

web worker 是運(yùn)行在后臺(tái)的 JavaScript,獨(dú)立于其他腳本,不會(huì)影響頁(yè)面的性能。您可以繼續(xù)做任何愿意做的事情:點(diǎn)擊、選取內(nèi)容等等,而此時(shí) web worker 在后臺(tái)運(yùn)行。

我們需要把希望單獨(dú)執(zhí)行的javascript代碼放到一個(gè)單獨(dú)的js文件中,然后在頁(yè)面中調(diào)用Worker構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)線程,參數(shù)是該文件路徑,參數(shù)存放如果是相對(duì)地址,那么要以包含調(diào)用Worker構(gòu)造函數(shù)語(yǔ)句所在腳本為參照,如果是絕對(duì)路徑,需要保證同源(協(xié)議+主機(jī)+端口)。這個(gè)文件不需要我們?cè)陧?yè)面使用script標(biāo)簽顯示引用。

var worker = new Worker('src/js/worker.js');11

我們可以看到worker對(duì)象只有兩個(gè)屬性,其實(shí)是兩個(gè)回調(diào)函數(shù)句柄

onerror:當(dāng)worker運(yùn)行出現(xiàn)錯(cuò)誤,并且沒(méi)有在worker中ing捕獲,會(huì)在此捕獲

onmessage:當(dāng)worker向主線程發(fā)送消息是調(diào)用

在其prototype內(nèi)有兩個(gè)重要方法

postMessage:很熟悉的趕腳,之前我們介紹過(guò)window對(duì)象的postMessage()方法,woker的postMessage方法和window的比較類似,但參數(shù)略有不同,只需要傳遞消息內(nèi)容就可以,而且支持所有JavaScript原生數(shù)據(jù)類型,當(dāng)然不放心的話同樣也可以序列化為字符串傳遞

terminate:終止worker執(zhí)行,有些worker執(zhí)行比較慢,主線程可以主動(dòng)終止其執(zhí)行

下面我們用web workers重寫上面那個(gè)例子。

相關(guān)代碼請(qǐng)到github查看。

test_web_worker.html

script

var worker = new Worker('./worker.js');

window.alert('hi');

/script12341234

worker.js

setTimeout(function(){console.log('done!');},2000);

[img]

在html5中,多線程worker和異步ajax有什么區(qū)別

多線程是屬于并發(fā)范疇,而異步是數(shù)據(jù)請(qǐng)求方式的范疇,與同步相對(duì)。從具體使用場(chǎng)景來(lái)說(shuō),耗CPU的任務(wù)可以移到worker中處理,ajax主要是IO費(fèi)時(shí)間,為了保證不讓代碼阻塞,所以異步處理,等數(shù)據(jù)到達(dá)時(shí)再通知程序。這是在html5中的變通方法,因?yàn)閍jax是比較早實(shí)現(xiàn)的,而worker是比較新的一個(gè)概念,可以說(shuō)worker的功能是覆蓋ajax的,只是由于HTML的不斷發(fā)展自然出現(xiàn)了這樣的問(wèn)題。

在其它語(yǔ)言中,一般費(fèi)時(shí)任務(wù)都放在其它線程中,以避免阻塞主線程。而不管它是費(fèi)CPU還是費(fèi)IO。

總之,這都是HTML的錯(cuò)。你大可以把網(wǎng)絡(luò)請(qǐng)求也放在worker中處理,但不幸的是,支持worker的瀏覽器并不多。

HTML5(四)——Web Workers

JavaScript 語(yǔ)言是采用單線程模型,也就是任務(wù)只能在一個(gè)線程上完成,一次只能做一件事,前面任務(wù)沒(méi)執(zhí)行完,后面的任務(wù)只能排隊(duì)等待,由于多核 CPU 的出現(xiàn),單線程帶來(lái)很大不便,無(wú)法充分發(fā)揮計(jì)算機(jī)的能力。

Web Worker 就是為了 javascript 創(chuàng)造多線程而生的,主線程創(chuàng)建 worker 子線程,將一些任務(wù)分配給后臺(tái)運(yùn)行,等到子線程完成計(jì)算任務(wù),再把結(jié)果返回給主線程,好處是計(jì)算密集型或高延遲的任務(wù)被 worker 負(fù)擔(dān)了,主線程就會(huì)很流暢。網(wǎng)頁(yè)加載展示可分為兩部分:主進(jìn)程也叫 UI 進(jìn)程,子進(jìn)程也叫工作進(jìn)程,子進(jìn)程不能控制 UI 進(jìn)程,只能進(jìn)行數(shù)據(jù)交互。

Web Worker 子線程一旦創(chuàng)建成功,就會(huì)獨(dú)立于其他腳本始終運(yùn)行,不會(huì)被主線程上活動(dòng)打斷。這樣有利于隨時(shí)響應(yīng)主線程的通信。但是這也造成 Worker 比較耗費(fèi)資源,不應(yīng)該過(guò)度使用,使用完畢之后應(yīng)該關(guān)閉。

使用 Web Worker 注意點(diǎn):

2.1 創(chuàng)建Worker線程:

創(chuàng)建worker之前,先檢查瀏覽器是否支持它。使用 typeof 檢查,代碼如下:

檢查瀏覽器支持 worker 之后,主線程使用 new 命令,調(diào)用 worker() 構(gòu)造函數(shù),新建 Worker 線程。

構(gòu)造函數(shù)的參數(shù)是一個(gè)腳本文件,該文件不能是本地文件,必須來(lái)自網(wǎng)絡(luò)腳本,該文件就是Worker 線程要執(zhí)行的任務(wù)。如果該文件加載失敗,Worker 就會(huì)失敗。

2.2 主線程與子線程數(shù)據(jù)通信:

主線程調(diào)用 postMessage() 方法,向 Worker 發(fā)消息。postMessage(參數(shù)) 方法中參數(shù)就是傳給 Worker 的數(shù)據(jù),這個(gè)數(shù)據(jù)可以是任意格式。

緊接著 Worker 線程,通過(guò) onmessage 指定監(jiān)聽(tīng)函數(shù),接收消息。worker.js 代碼如下:

worker子進(jìn)程收到消息之后,可以繼續(xù)向主進(jìn)程發(fā)送消息,使用 postMessage()。代碼如上。

主進(jìn)程也通過(guò)onmessage監(jiān)聽(tīng)函數(shù)接收消息。

2.3 Worker線程

Worker線程內(nèi)部,添加 this.onmessage 監(jiān)聽(tīng)函數(shù),其中 this 是子線程的全局對(duì)象,也可以替換成 self,self 代表子線程本身。等同于:

除了使用 self.onmessage 指定監(jiān)聽(tīng)函數(shù),也可以使用 this.addEventListener() 監(jiān)聽(tīng)事件對(duì)象。上述 worker.js 代碼可改為:

2.4 錯(cuò)誤處理

主線程可以監(jiān)聽(tīng)Worker是否發(fā)生錯(cuò)誤,如果發(fā)生錯(cuò)誤,Worker 會(huì)觸發(fā)主線程的 error 事件。

worker 子線程也可以監(jiān)聽(tīng) error 事件。

2.5 關(guān)閉 Worker

Worker 比較耗費(fèi)資源,不應(yīng)該過(guò)度使用,使用完畢之后應(yīng)該關(guān)閉。主線程和子線程都可以關(guān)閉。

通常情況下,Worker 載入的是一個(gè)單獨(dú)的 javascript 文件,但是也可以載入與主線程在同一個(gè)網(wǎng)頁(yè)的代碼。網(wǎng)頁(yè)中添加 Worker 腳本,必須注意指定script標(biāo)簽的type屬性是一個(gè)瀏覽器不認(rèn)識(shí)的值,否則就會(huì)失去意義。如:

然后,需要讀取這段代碼,先將嵌入網(wǎng)頁(yè)的腳本代碼轉(zhuǎn)成二進(jìn)制對(duì)象,然后為這個(gè)二進(jìn)制對(duì)象生成url,再讓worker加載url,這樣就實(shí)現(xiàn)了主進(jìn)程和worker在同一個(gè)網(wǎng)頁(yè)內(nèi)。代碼如下:

Worker構(gòu)造函數(shù)方法:

子進(jìn)程屬性方法:

Worker() 構(gòu)造函數(shù),可以接受兩個(gè)參數(shù),第一個(gè)是腳本的地址,第二個(gè)是參數(shù)是配置對(duì)象,該對(duì)象指定Worker的名稱。如:


網(wǎng)頁(yè)題目:html5線程,html5多線程
本文地址:http://weahome.cn/article/dsopsgc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部