1、多線程理解javascript
首先,咱們要理解什麼是多線程,百度百科上說:多線程(英語:multithreading),是指從軟件或者硬件上實現多個線程併發執行的技術。具備多線程能力的計算機因有硬件支持而可以在同一時間執行多於一個線程,進而提高總體處理性能。具備這種能力的系統包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器。[1] 在一個程序中,這些獨立運行的程序片斷叫做「線程」(Thread),利用它編程的概念就叫做「多線程處理(Multithreading)」。具備多線程能力的計算機因有硬件支持而可以在同一時間執行多於一個線程(臺灣譯做「執行緒」),進而提高總體處理性能。html
按照個人理解就是不阻塞的前提下,時間最優的方法,不侷限於流水線(單線)的方法。理解多線程的原理後,結合javascript,自己javascript是不支持多線程的。把異步處理的東西放到一個池中,當同步的解決完即圖中的t1到t7,而後喚醒異步隊列。java
2、Concurrent.Thread.jsweb
Concurrent.Thread.js庫是利用setTimeout和setInterval方法來模擬線程的概念。並行執行任務。下載地址:Concurrent.Thread.js編程
主要是爲了解決瀏覽器死卡的現象,當一個函數執行很是浪費時間和內存的時候,給另外開闢一個線程。由於javascript是單線程,會阻塞。這時候咱們引入這個庫文件,可使代碼不阻塞哦,應用方法主要是create方法建立一個單線程。瀏覽器
1session 2多線程 3併發 4異步 5 6 7 8 9 |
|
這麼就能夠在瀏覽器上邊點擊div有效果,同時console也在一直不停的打印數據。各忙各的。
這是理解Concurrent.Thread.js庫應用的最簡單方法。Concurrent.Thread提供了一個應用JavaScript 的異步通訊方式實現的定製通訊庫。相似於AJAX的原理,用get或者post方法發送和響應數據。具體參考能夠穿越連接http://www.cnblogs.com/0banana0/archive/2011/06/01/2067402.html,這裏能夠看到更詳細的解釋。
3、WebWork
js是單線程的去跑代碼,好比若是作一個循環從0到一個很大的數字相加而後輸出,瀏覽器可能會假死(無響應狀態)。可是用webwork之後,就能夠很是方便的進行渲染網頁的同時,計算這個數據。在 HTML5 中提出了工做線程(Web Worker)的概念,而且規範出 Web Worker 的三大主要特徵:可以長時間運行(響應),理想的啓動性能以及理想的內存消耗。Web Worker 容許開發人員編寫可以長時間運行而不被用戶所中斷的後臺程序,去執行事務或者邏輯,並同時保證頁面對用戶的及時響應。
WebWork能作什麼?
1.能夠加載一個JS進行大量的複雜計算而不掛起主進程,並經過postMessage,onmessage進行通訊, 在主線程與子線程間進行通訊,使用的是線程對象的postMessage和onmessage方法。不論是誰向誰發數據,發送發使用的都是postMessage方法,接收方都是使用onmessage方法接收數據。postMessage只有一個參數,那就是傳遞的數據,onmessage也只有一個參數,假設爲event,則經過event.data獲取收到的數據。
2.能夠在worker中經過importScripts(url)加載另外的腳本文件,即多個js文件
3.可使用 setTimeout(), clearTimeout(), setInterval(), and clearInterval():定時器可使用線程
4.可使用XMLHttpRequest來發送請求,使用AJAX
5.能夠訪問navigator的部分屬性:能夠在localStorage和sessionStorage
下面來具體說明一下webwork的專用線程使用步驟。
(1).固然是建立線程
1 |
|
(2).爲了在頁面主程序接收從多線程傳遞過來的消息,咱們須要使用多線程的 onmessage 事件處理器,定義 onmessage 的實例代碼以下:
1 |
|
(3).將數據傳給線程
1 |
|
(4).(worker.js)線程文件中返回結果給主頁面
1 2 3 4 5 6 7 8 9 10 |
|
定義:共享線程能夠由兩種方式來定義:一是經過指向 JavaScript 腳本資源的 URL 來建立,二是經過顯式的名稱。當由顯式的名稱來定義的時候,由建立這個共享線程的第一個頁面中使用 URL 會被用來做爲這個共享線程的 JavaScript 腳本資源 URL。經過這樣一種方式,它容許同域中的多個應用程序使用同一個提供公共服務的共享線程,從而不須要全部的應用程序都去與這個提供公共服務的 URL 保持聯繫。
好吧,一大段文字說明看得頭疼,簡單的說就是建立了一個共享線程,特色是共享,所謂共享,就是財產公有嘛.頁面腳本能夠與共享型web worker通訊,然而,與專用型web worker(使用了一個隱式的端口通訊)稍微有點不一樣的是,通訊是顯式的經過使用一個端口(port)對象並附加上一個消息事件處理程序來進行的。在收到web worker腳本的首個消息以後,共享型web worker把一個事件處理程序附加到激活的端口上。通常狀況下,處理程序會運行本身的postMessage()方法來把一個消息返回給調用代碼,接着端口的start()方法生成一個有效的消息進程。