1. 程式人生 > 程式設計 >JavaScript執行機制詳細介紹

JavaScript執行機制詳細介紹

目錄
  • 1.程序與執行緒的概念
  • 2.瀏覽器原理
  • 3.同步與非同步qLPgAsND
  • 4.執行棧與任務佇列
  • 5.事件迴圈(Event-Loop)
  • 6.定時器

前言:

不論是工作還是面試,我們可能都經常會碰到需要知道程式碼的執行順序的場景,所以打算花點時間徹底搞懂JavaScript的執行機制。

想要搞懂執行機制,你需要清楚下面這些知識: (以瀏覽器環境為例,與Node環境不同)

1.程序與執行緒的概念

  • 瀏覽器原理
  • 事件迴圈(Event-Loop),任務佇列(同步任務,非同步任務,微任務,巨集任務)
  • 程序與執行緒

我們都知道計算機的核心是CPU,它承擔了所有的計算任務;而是計算機的管理者,它負責任務的排程、資源的分配和管理http://www.cppcns.com

,統領整個計算機硬體;應用程式則是具有某種功能的程式,程式是運行於作業系統之上的。

程序:

程序是一個具有獨立功能的程式在一個數據集上的一次動態執行的過程,是作業系統進行資源分配和排程的一個獨立單位,是應用程式執行的載體 程序是能擁有資源和獨立執行的最小單位,也是程式執行的最小單位。

程序具有的特徵:

  • 動態性:程序是程式的一次執行過程,是臨時的,有生命期的,是動態產生,動態消亡的;
  • 併發性:任何程序都可以同其他程序一起併發執行;
  • 獨立性:程序是系統進行資源分配和排程的一個獨立單位;
  • 結構性:程序由程式、資料和程序控制塊三部分組成。

執行緒:

執行緒是程式執行中一個單一的順序控制流程,是程式執行流的最小單元,是處理器排程和分派的基本單位。一個程序可以有一個或多個執行緒,各個執行緒之間共享程式的記憶體空間(也就是所在程序的記憶體空間)。一個標準的執行緒由執行緒ID、當前指令指標(PC)、暫存器和堆疊組成。而程序由記憶體空間(程式碼、資料、程序空間、開啟的檔案)和一個或多個執行緒組成。

程序與執行緒的區別:

  • 執行緒是程式執行的最小單位,而程序是作業系統分配資源的最小單位;
  • 一個程序由一個或多個執行緒組成,執行緒是一個程序中程式碼的不同執行路線;
  • 程序之間相互獨立,但同一程序下的各個執行緒之間共享程式的記憶體空間(包括程式碼段、資料集、堆等)及一些程序級的資源(如開啟檔案和訊號),程序與程序之間互不可見;
  • 排程和切換:執行緒上下文切換比程序上下文切換要快得多。

為什麼是單執行緒?

Script從它誕生之初就是作為瀏覽器的語言,主要用來處理使用者互動以及操作DOM,這就決定了它只能是單執行緒的,否則會帶來非常複雜的同步問題。

舉個例子:

如果JS是多執行緒的,其中一個執行緒要修改一個DOM元素,另外一個執行緒想要刪除這個DOM元素,這時候瀏覽器就不知道該聽誰的。所以為了避免複雜性,從一誕生,JavaScript就被設計成單執行緒。

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

2.瀏覽器原理

作為前端工程師,瀏覽器想必都不陌生,並且瀏覽器是多程序的。

瀏覽器組成部分:

  • 使用者介面:包括位址列,前進/後退/重新整理/書籤