Parallel, Concurrent and Distributed
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 密集 | 分布式數據處理 | 高延遲操作 | 輕量級並行 | 重量級隔離和獨立進程控制 |
關係與區分:
- 線程和進程是操作系統中的執行單元,進程可以包含多個線程。
- 平行和並行描述的是任務的執行方式,平行需要硬體支持,並行則是邏輯上的協作。
- 異步是一種程式設計模式,用來優化等待時間,但不等於並行或平行。
- 分散是一種系統架構,通常需要將任務分布到多個物理節點上執行。
Python 的 Global Interpreter Lock (GIL) 是 Python 解釋器的一個機制,專門用來確保同一時間只有一個線程可以執行 Python 的字節碼。
Read other posts