• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      榮艷冬

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

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

      1引言

      多線程技術(shù)已經(jīng)被普遍地應(yīng)用到軟件開發(fā)之中,它是非常成熟的技術(shù)。多線程技術(shù)是指在一個(gè)進(jìn)程中包含多個(gè)可并行執(zhí)行的控制流,這些控制流切換時(shí)不必通過進(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)頁規(guī)范,它融入了非常多的新技術(shù),其中Web Worker是HTML5提出的工作線程技術(shù),工作線程允許web頁面中進(jìn)行多線程編程。本文主要討論工作線程與傳統(tǒng)多線程的差別、工作線程的技術(shù)原理、必要性和應(yī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í)語言都提供了多線程支持,例如:Java和.net等程序設(shè)計(jì)語言提供了專門的多線程接口,用戶可以更加方便的進(jìn)行多線程編程。

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

      多線程技術(shù)應(yīng)用已經(jīng)非常成熟,以下是兩個(gè)比較典型的應(yī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大主要特征:能夠長時(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)用場景等諸多方面還是有很大差別的,其最主要的特點(diǎn)是在頁面端實(shí)現(xiàn),這是網(wǎng)頁技術(shù)的一個(gè)創(chuàng)新內(nèi)容。

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

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

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

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

      3.2工作線程的必要性

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

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

      3.3應(yīng)用場景

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

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

      4結(jié)語

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

      猜你喜歡
      多線程
      Java并發(fā)工具包對(duì)并發(fā)編程的優(yōu)化
      沙湾县| 桐城市| 句容市| 顺昌县| 珠海市| 田阳县| 五寨县| 淳化县| 辽阳市| 合川市| 万盛区| 南召县| 博野县| 浦东新区| 屯门区| 安徽省| 永平县| 陆川县| 庄浪县| 栖霞市| 旺苍县| 琼中| 探索| 资阳市| 昌宁县| 湟源县| 新晃| 辽阳县| 泰州市| 吴桥县| 诏安县| 远安县| 秦皇岛市| 双牌县| 日照市| 日土县| 桦川县| 大同县| 天台县| 阜新| 阳曲县|