国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

HTM L5 Web WOrker技術(shù)及應(yīng)用研究

2016-03-04 00:10榮艷冬
無(wú)線互聯(lián)科技 2015年11期
關(guān)鍵詞:多線程

榮艷冬

摘要:文章主要討論網(wǎng)頁(yè)前端多線程技術(shù),首先分析了傳統(tǒng)多線程技術(shù)原理和應(yīng)用場(chǎng)景,然后分析了HTML5規(guī)范中WebWorker的技術(shù)原理、產(chǎn)生的必要性和具體應(yīng)用場(chǎng)景,通過(guò)對(duì)比分析得出了以下結(jié)論:網(wǎng)頁(yè)前端的工作線程和傳統(tǒng)的多線程本質(zhì)上有很大差別,它更適合由于服務(wù)器或者客戶端長(zhǎng)時(shí)間計(jì)算導(dǎo)致網(wǎng)頁(yè)前端處于阻塞狀態(tài)的工作場(chǎng)景。

關(guān)鍵詞:HTML5;Web Worker;多線程;工作線程

1引言

多線程技術(shù)已經(jīng)被普遍地應(yīng)用到軟件開(kāi)發(fā)之中,它是非常成熟的技術(shù)。多線程技術(shù)是指在一個(gè)進(jìn)程中包含多個(gè)可并行執(zhí)行的控制流,這些控制流切換時(shí)不必通過(guò)進(jìn)程調(diào)度,通信時(shí)可以借助于共享的內(nèi)存區(qū)。多線程的優(yōu)勢(shì)非常明顯,它能高效的利用系統(tǒng)資源,提高用戶體驗(yàn),縮短完成任務(wù)的時(shí)間。當(dāng)然其缺點(diǎn)也非常明顯,例如:增加了程序設(shè)計(jì)和實(shí)現(xiàn)的復(fù)雜度、需要更多的計(jì)算機(jī)資源等。

HTML5是由W3C組織2014年完成的新網(wǎng)頁(yè)規(guī)范,它融入了非常多的新技術(shù),其中Web Worker是HTML5提出的工作線程技術(shù),工作線程允許web頁(yè)面中進(jìn)行多線程編程。本文主要討論工作線程與傳統(tǒng)多線程的差別、工作線程的技術(shù)原理、必要性和應(yīng)用場(chǎng)景。

2傳統(tǒng)多線程技術(shù)

2.1技術(shù)概述

傳統(tǒng)多線程技術(shù)主要應(yīng)用到軟件編程中,線程相當(dāng)于一個(gè)小的進(jìn)程,由操作系統(tǒng)進(jìn)行調(diào)度,多個(gè)線程可以由一個(gè)進(jìn)程進(jìn)行管理,當(dāng)前幾乎所有的高級(jí)語(yǔ)言都提供了多線程支持,例如:Java和.net等程序設(shè)計(jì)語(yǔ)言提供了專門的多線程接口,用戶可以更加方便的進(jìn)行多線程編程。

2.2技術(shù)應(yīng)用場(chǎng)景

多線程技術(shù)應(yīng)用已經(jīng)非常成熟,以下是兩個(gè)比較典型的應(yīng)用場(chǎng)景:

(1)軟件多任務(wù)執(zhí)行,用戶可以在一個(gè)軟件上啟動(dòng)多個(gè)任務(wù),這能夠提高了軟件的利用率;另外,軟件在執(zhí)行安裝、計(jì)算等操作時(shí)也可以同時(shí)啟動(dòng)多任務(wù),這可以有效地利用CPU等計(jì)算機(jī)資源,從而提高工作效率。

(2)網(wǎng)絡(luò)編程,在網(wǎng)絡(luò)編程中服務(wù)器端需要使用多線程技術(shù),一個(gè)新的用戶和服務(wù)器進(jìn)行連接,需要啟動(dòng)一個(gè)新的線程,這可以讓每個(gè)用戶和服務(wù)器的交互是獨(dú)立的,從而保證用戶能夠單獨(dú)完成業(yè)務(wù)邏輯和數(shù)據(jù)通信,服務(wù)器資源充分被利用。

3 HTML5 Web Worker技術(shù)

在HTML5中,多線程技術(shù)被稱為工作線程(Web Worker),HTML5規(guī)范出Web Worker的3大主要特征:能夠長(zhǎng)時(shí)間運(yùn)行(響應(yīng)),理想的啟動(dòng)性能和內(nèi)存消耗。

3.1 Web Worker技術(shù)原理

Web Worker技術(shù)本質(zhì)是Web程序中可以并發(fā)執(zhí)行多個(gè)Javascript腳本,每一個(gè)被執(zhí)行的腳本稱為一個(gè)線程,彼此相互獨(dú)立,統(tǒng)一由瀏覽器的Javascript引擎進(jìn)行管理,它和傳統(tǒng)的線程在線程管理、應(yīng)用場(chǎng)景等諸多方面還是有很大差別的,其最主要的特點(diǎn)是在頁(yè)面端實(shí)現(xiàn),這是網(wǎng)頁(yè)技術(shù)的一個(gè)創(chuàng)新內(nèi)容。

HTML5中的Web Worker可以分為2種不同線程類型,一個(gè)是專用線程(Dedicated Worker),一個(gè)是共享線程(Shared Worker)。專用線程是指只能在單一客戶端上實(shí)現(xiàn)多線程,與其他客戶端不發(fā)生交互;共享線程更適合多個(gè)瀏覽器窗口、iframe或者Worker并發(fā)訪問(wèn),適應(yīng)多個(gè)客戶端之間進(jìn)行數(shù)據(jù)的交互和控制,它允許同域中的多個(gè)應(yīng)用程序使用同一個(gè)提供公共服務(wù)的共享線程。共享線程的通信和專用線程稍有不同,需要通過(guò)port屬性進(jìn)行通信。以下是專用線程的創(chuàng)建、通信和終止操作:

(1)線程的創(chuàng)建,HTML5通過(guò)“new Worker(url)”語(yǔ)句建立一個(gè)新的工作線程,參數(shù)“url”是Javascript文件資源,它不可以跨域,這個(gè)文件中的Javascript代碼在一個(gè)單獨(dú)的工作線程中運(yùn)行,工作線程如果需要加載其他的Javascript文件,可以使用“importScript”函數(shù)。

(2)線程的通信,頁(yè)面主程序通過(guò)onMessage事件接收專用線程傳遞的數(shù)據(jù),使用postMessage事件給頁(yè)面主程序發(fā)送數(shù)據(jù)。

(3)線程的終止,通過(guò)調(diào)用“terminate()”方法立刻終止當(dāng)前線程,線程沒(méi)有完成的操作不會(huì)被繼續(xù)執(zhí)行。

3.2工作線程的必要性

Javascript語(yǔ)言是單線程的,所以頁(yè)面端程序設(shè)計(jì)不能是并行的,這給許多頁(yè)面程序設(shè)計(jì)帶來(lái)了技術(shù)瓶頸,頁(yè)面端如果一個(gè)Javascript程序沒(méi)有完成,其他的Javascript將被阻塞,如果用戶通過(guò)Javascript語(yǔ)言向服務(wù)器端發(fā)送請(qǐng)求,而服務(wù)器端計(jì)算時(shí)間較長(zhǎng),不能及時(shí)給客戶端響應(yīng),頁(yè)面將處于無(wú)響應(yīng)狀態(tài)。雖然可以通過(guò)setInterval和setTimeout函數(shù)模擬多線程工作,但是其本質(zhì)是單線程,不能有效的利用客戶端資源,無(wú)法徹底的解決多線程問(wèn)題。

Web Worker技術(shù)從本質(zhì)上彌補(bǔ)了Javascript的單線程缺陷,無(wú)論是對(duì)于服務(wù)器端計(jì)算時(shí)間較長(zhǎng)的Javaseript請(qǐng)求,還是前端Javascript語(yǔ)言長(zhǎng)時(shí)間的運(yùn)算,都可以單獨(dú)創(chuàng)建工作線程,不影響其他線程工作。

3.3應(yīng)用場(chǎng)景

(1)服務(wù)器端長(zhǎng)響應(yīng),服務(wù)器端有可能進(jìn)行長(zhǎng)時(shí)間的計(jì)算,不能夠給客戶端及時(shí)響應(yīng),客戶端會(huì)處于阻塞狀態(tài),解決這種問(wèn)題通常有2種方案:一是優(yōu)化服務(wù)器端,縮短計(jì)算時(shí)間;二是客戶端采用輪詢獲得服務(wù)器端計(jì)算結(jié)果。顯然第1種方案沒(méi)有徹底解決問(wèn)題,第2種方案使程序設(shè)計(jì)更加復(fù)雜,更加浪費(fèi)服務(wù)器端資源。HTML5的工作線程適應(yīng)這種場(chǎng)景,對(duì)于服務(wù)器端長(zhǎng)響應(yīng)的請(qǐng)求可以使用Ajax進(jìn)行實(shí)現(xiàn),為發(fā)送請(qǐng)求的Javascript代碼單獨(dú)建立一個(gè)工作線程,這樣,服務(wù)器端長(zhǎng)響應(yīng)的請(qǐng)求和頁(yè)面其他內(nèi)容處于兩個(gè)線程,阻塞只發(fā)生在長(zhǎng)響應(yīng)的線程中,頁(yè)面其他工作不受影響。

(2)客戶端計(jì)算,通常Web編程中客戶端的長(zhǎng)時(shí)間計(jì)算是不被允許的,因?yàn)殚L(zhǎng)時(shí)間的計(jì)算會(huì)阻塞頁(yè)面,降低用戶瀏覽網(wǎng)頁(yè)的體驗(yàn)度。在實(shí)際工作過(guò)程中客戶端的復(fù)雜計(jì)算是很普遍的,例如3D網(wǎng)頁(yè)技術(shù)、在線游戲技術(shù)等都需要客戶端進(jìn)行長(zhǎng)時(shí)間的計(jì)算。工作線程適合這個(gè)場(chǎng)景,長(zhǎng)時(shí)間的客戶端計(jì)算可以由一個(gè)單獨(dú)的工作線程進(jìn)行處理,不影響頁(yè)面的其他工作,用戶甚至可以設(shè)置加載動(dòng)畫等待計(jì)算結(jié)果。

4結(jié)語(yǔ)

HTML5的工作線程在本質(zhì)上和傳統(tǒng)多線程是不同的,這也決定了他們適應(yīng)的場(chǎng)景有所不同。網(wǎng)頁(yè)前端多線程技術(shù)當(dāng)前并沒(méi)有被廣泛的應(yīng)用,Web Worker規(guī)范雖然已經(jīng)制定完成,但并沒(méi)有很多成熟的應(yīng)用。但是,它所提出的理念讓客戶端編程更加豐富,這也可以更加有效的利用客戶端資源,在提高工作效率的同時(shí),也減輕了服務(wù)器端的壓力。

猜你喜歡
多線程
Java并發(fā)工具包對(duì)并發(fā)編程的優(yōu)化