首頁  >  文章  >  web前端  >  javascript是單線程嗎

javascript是單線程嗎

WBOY
WBOY原創
2022-03-10 10:04:212944瀏覽

JavaScript是單執行緒的。 JavaScript即使具有多個內核,也只能使它在稱為主線程的單一線程上運行任務;JavaScript作為瀏覽器腳本語言,主要用途是與用戶互動以及操作DOM,如果不是單線程的話會帶來很複雜的同步問題。

javascript是單線程嗎

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

javascript是單執行緒嗎

作為瀏覽器腳本語言,JavaScript的主要用途是與使用者互動,以及操作DOM。這決定了它只能是單線程,否則會帶來複雜的同步問題。

一個執行緒基本上是一個單一的過程中,一個程式可以使用它來完成任務。每個執行緒一次只能執行一個任務:

Task A --> Task B --> Task C

每個任務將依序運行;必須先完成一項任務,然後才能開始下一項任務。

如前所述,許多電腦現在具有多個內核,因此可以一次執行多個操作。可以支援多個執行緒的程式語言可以使用多個核心來同時完成多個任務:

Thread 1: Task A --> Task B
Thread 2: Task C --> Task D

傳統上,JavaScript是單執行緒的。即使具有多個內核,也只能使它在稱為主線程的單一線程上運行任務。我們上面的範例是這樣運作的:

Main thread: Render circles to canvas --> Display alert()

一段時間後,JavaScript獲得了一些工具來解決這類問題。 Web worker可讓您將一些JavaScript處理傳送到一個單獨的執行緒(稱為worker),以便您可以同時執行多個JavaScript區塊。通常,您將使用工作程序在主執行緒上運行昂貴的進程,從而不會阻止使用者互動。

  Main thread: Task A --> Task C
Worker thread: Expensive task B

考慮到這一點,再次打開瀏覽器的JavaScript控制台,看看simple-sync-worker.html(看到它即時運行)。這是對先前範例的重寫,該範例在單獨的工作執行緒中計算1000萬個日期。現在,當您單擊按鈕時,瀏覽器將能夠在日期完成計算之前顯示該段落。第一個操作不再阻塞第二個。

JavaScript語言的一大特點就是單線程,也就是說,同一個時間只能做一件事。那麼,為什麼JavaScript不能有多個執行緒呢?這樣能提高效率啊。

JavaScript的單線程,與它的用途有關。作為瀏覽器腳本語言,JavaScript的主要用途是與使用者互動,以及操作DOM。這決定了它只能是單線程,否則會帶來複雜的同步問題。例如,假定JavaScript同時有兩個線程,一個線程在某個DOM節點上添加內容,另一個線程刪除了這個節點,而這時瀏覽器應該以哪個線程為準?

所以,為了避免複雜性,從一誕生,JavaScript就是單線程,這已經變成了這門語言的核心特徵,將來也不會改變。

為了利用多核心CPU的運算能力,HTML5提出Web Worker標準,允許JavaScript腳本建立多個線程,但是子執行緒完全受主執行緒控制,且不得操作DOM。所以,這個新標準並沒有改變JavaScript單執行緒的本質。

相關推薦:javascript學習教學

以上是javascript是單線程嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn