1. 平行 (Parallel)#

  • 概念:指多個任務在同一時間真正地同時執行。需要硬體支持,比如多核處理器,每個核心可以同時處理不同的任務。
  • 特點
    • 必須有多個物理處理單元(例如 CPU 核心)。
    • 通常用於計算密集型任務,如科學計算、大數據處理等。
    • 範例:圖像處理中,同時處理多個像素或區塊。
  • 關鍵詞:真正的“同時”。

2. 併發 (Concurrent)#

  • 概念:指多個任務在邏輯上同時進行,但並不一定是物理上的同時進行。任務可能交替執行,依賴於調度機制。
  • 特點
    • 並行不要求多核處理器。
    • 通常用於 I/O 密集型任務(如網絡請求、文件讀寫),藉助時間分片來切換任務。
    • 範例:多人輪流在同一部電腦上打字。
  • 關鍵詞:邏輯上的“同時”。

3. 分散 (Distributed)#

  • 概念:指多個任務分布在多個不同的計算節點上協同完成工作,這些節點通常是通過網絡連接的。
  • 特點
    • 涉及多台物理機器。
    • 節點之間通過通信協議(如 HTTP、gRPC)進行協作。
    • 範例:Hadoop、Spark 等大數據框架。
  • 關鍵詞:多機器、分布式系統。

4. 異步 (Asynchronous)#

  • 概念:指在任務執行時,不需要等待當前任務完成,主線程可以繼續執行其他任務,等結果準備好後再處理。
  • 特點
    • 適合處理高延遲的 I/O 操作。
    • 通常用回調函數、Promise 或 async/await 模式來實現。
    • 範例:發起一個網絡請求後,繼續執行其他代碼,網絡響應返回時再處理。
  • 關鍵詞:非阻塞、回調、事件驅動。

5. 線程 (Thread)#

  • 概念:是操作系統分配 CPU 資源的基本單位,每個線程都在進程內運行,共享進程的內存空間。
  • 特點
    • 多線程在同一進程內執行。
    • 線程之間共享內存資源,但也容易引發競爭條件。
    • 範例:在一個應用程式中,同時執行文件下載和數據分析。
  • 關鍵詞:共享內存、輕量級。

6. 進程 (Process)#

  • 概念:是操作系統分配資源的基本單位,每個進程有自己獨立的內存空間。
  • 特點
    • 不同進程之間的內存是隔離的,通過 IPC(如管道、共享內存)進行通信。
    • 範例:在一台電腦上,同時運行瀏覽器和文檔編輯器。
  • 關鍵詞:獨立內存、重量級。

比較總結#

特性 平行 (Parallel) 並行 (Concurrent) 分散 (Distributed) 異步 (Asynchronous) 線程 (Thread) 進程 (Process)
同時性 真正的同時執行 邏輯上的同時執行 節點間協同執行 非阻塞執行 多線程共享內存並行執行 多進程獨立內存並行執行
硬體要求 多核處理器 無需多核 多台機器 無需多核 單機多核 單機或多機(分布式)
資源共享 有(同一台設備) 依情況 依情況 共享內存 獨立內存
使用場景 高性能計算 I/O 密集 分布式數據處理 高延遲操作 輕量級並行 重量級隔離和獨立進程控制

關係與區分

  1. 線程進程是操作系統中的執行單元,進程可以包含多個線程。
  2. 平行並行描述的是任務的執行方式,平行需要硬體支持,並行則是邏輯上的協作。
  3. 異步是一種程式設計模式,用來優化等待時間,但不等於並行或平行。
  4. 分散是一種系統架構,通常需要將任務分布到多個物理節點上執行。

Python 的 Global Interpreter Lock (GIL) 是 Python 解釋器的一個機制,專門用來確保同一時間只有一個線程可以執行 Python 的字節碼。