91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript多線程的實現方法

發布時間:2021-07-20 09:04:27 來源:億速云 閱讀:455 作者:chen 欄目:web開發

本篇內容介紹了“javascript多線程的實現方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在js中,可以使用Worker類來實現多線程,語法格式為“var worker = new Worker(js文件路徑);”。使用這個類的時候,它就會向瀏覽器申請一個新的線程,該線程就用來單獨執行一個js文件。

本教程操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

我們都知道JS是一種單線程語言,即使是一些異步的事件也是在JS的主線程上運行的(具體是怎么運行的,可以看我另一篇博客JS代碼運行機制)。像setTimeout、ajax的異步請求,或者是dom元素的一些事件,都是在JS主線程執行的,這些操作并沒有在瀏覽器中開辟新的線程去執行,而是當這些異步操作被操作時或者是被觸發時才進入事件隊列,然后在JS主線程中開始運行。

首先說一下瀏覽器的線程,瀏覽器中主要的線程包括,UI渲染線程,JS主線程,GUI事件觸發線程,http請求線程。

JS作為腳本語言,它的主要用途是與用戶互動,以及操作DOM。這決定了它只能是單線程,否則會帶來很復雜的同步問題。(這里這些問題我們不做研究)

但是單線程的語言,有一個很致命的確定。如果說一個腳本語言在執行時,其中某一塊的功能在執行時耗費了大量的時間,那么就會造成阻塞。這樣的項目,用戶體驗是非常差的,所以這種現象在項目的開發過程中是不允許存在的。

其實JS為我們提供了一個Worker的類,它的作用就是為了解決這種阻塞的現象。當我們使用這個類的時候,它就會向瀏覽器申請一個新的線程。這個線程就用來單獨執行一個js文件。

var worker = new Worker(js文件路徑);

那么這個語句就會申請一個線程用來執行這個js文件。

當然,在主線程中有一些方法來實現對新線程的控制和數據的接收。在這里,我們只說比較常用的幾個方法。

//postMessage(msg);
//postMessage方法把在新線程執行的結果發送到瀏覽器的js引擎線程里
worker.onmessage = function(){
    //獲取在新線程中執行的js文件發送的數據 用event.data接收數據
    console.log( event.data )
};
setTimeout( function(){
    worker.terminate();
    //terminate方法用于關閉worker線程
},2000)

setTimeout( function(){
    worker = new Worker("js/test22.js");
    //再次開啟worker線程
},3000)

在新線程中使用postMessage()方法可以向主線程中發送一些數據,主線程中使用worker的onmessage事件來接收這些數據,這樣就實現了js的多線程執行和多線程之間數據的傳遞。

“javascript多線程的實現方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三门县| 丰城市| 夏河县| 巴彦淖尔市| 铁力市| 垫江县| 福州市| 大埔县| 广德县| 大悟县| 威信县| 襄汾县| 广南县| 上林县| 甘孜| 涿鹿县| 东安县| 大理市| 察隅县| 靖江市| 朝阳县| 英吉沙县| 古浪县| 建德市| 南昌市| 乐清市| 枣阳市| 运城市| 井研县| 扎赉特旗| 平乐县| 阳泉市| 称多县| 休宁县| 榆中县| 延长县| 安乡县| 肇源县| 中宁县| 永城市| 望都县|