搜尋
首頁運維安全JavaScript單線程和任務隊列是什麼

JavaScript單線程和任務隊列是什麼

May 11, 2023 pm 10:31 PM
javascript

一、JavaScript為什麼要設計為單執行緒?

JavaScript語言的一大特點就是單線程,換言之就是同一時間只能做一件事。

for(var j = 0; j <p>上面的程式碼,只有for迴圈執行完畢,才會執行end;</p><p>JavaScript的單一線程,與它的用途有關。作為瀏覽器腳本語言,JavaScript的主要用途就是與使用者互動,以及操作DOM。這決定了它只能是單線程,否則會帶來複雜的同步問題。 </p><p>假定JavaScript同時有兩個線程,一個線程在某個DOM節點上添加內容,另一個線程刪除了這個節點,這時瀏覽器應該以哪個線程為準? </p><p>所以,為了避免複雜性,從一誕生,JavaScript就是單線程,這已經變成了這門語言的核心特徵,將來也不會改變。 </p><p>為了利用多核心CPU的運算能力,HTML5提出Web Worker標準,允許JavaScript腳本建立多個線程,但是子執行緒完全受主執行緒控制,且不得操作DOM。所以,這個新標準並沒有改變JavaScript單執行緒的本質。 </p><p>二、任務隊列</p><p>"任務隊列"是一個事件的隊列(也可以理解成訊息的隊列),IO設備完成一項任務,就在「任務隊列"中添加一個事件,表示相關的非同步任務可以進入"執行棧"了。主執行緒讀取"任務佇列",就是讀取裡面有哪些事件;</p><p>我們來解釋:</p><p>Javascript是單執行緒的,單執行緒就代表所有任務需要排隊,前一個任務結束,才會執行後一個任務。如果前一個任務耗時很長,後一個任務就得一直等著。 </p><p>如果排隊是因為運算量太大,CPU佔用高倒也情有可原,但是很多時候CPU是處於空閒狀態或有很大的空間未被使用,因為IO設備(輸入輸出設備)很慢(例如Ajax操作從網路讀取資料),只能等結果出來,才可以往下執行。 </p><p>JavaScript語言的設計者意識到,主執行緒完全可以不管IO設備,把這些等待中的任務掛起,先執行排在後面的任務。等到IO設備回傳了結果,再去執行掛起的任務。 </p><p>因此,所有任務可以分成兩種,一種是同步任務(synchronous),另一種是非同步任務(asynchronous)。 </p><p>同步任務指的是,在主執行緒上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務;</p><p>#非同步任務指的是,不進入主執行緒、而進入"任務隊列"(task queue)的任務,只有"任務隊列"通知主線程,某個非同步任務可以執行了,該任務才會進入主線程執行。 </p><p>具體來說,非同步執行的運作機制如下。 (同步執行也是如此,因為它可以被視為沒有非同步任務的非同步執行。)</p><p>所有同步任務都在主執行緒上執行,形成一個執行堆疊</p><p>主執行緒之外,還存在一個"任務隊列"(task queue)。只要非同步任務有了運行結果,就在"任務隊列"之中放置一個事件。 </p><p>一旦"執行堆疊"中的所有同步任務執行完畢,系統就會讀取"任務佇列",看看裡面有哪些事件。那些對應的非同步任務,於是結束等待狀態,進入執行棧,開始執行。 </p><p>主執行緒不斷重複執行上面的第三步。 </p><pre class="brush:php;toolbar:false">for(var j = 0; j <p>//結果0 1 2 3 4 end timeout timeout timeout timeout timeout</p>##

以上是JavaScript單線程和任務隊列是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具