Wiki
並行是什麼
約 2 分鐘閱讀
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
並行(parallelism)關注的是:
多個任務是否在同一時刻真的同時執行。
它更偏向效能和吞吐,而不是單純的程式結構。
1.一個直觀理解
如果一件事可以拆成幾份獨立工作:
任务 A
任务 B
任务 C
任务 D
並且機器有多個 CPU 核心,那麼這些任務就可能同時執行。
這就是並行:
多个执行单元
同一时刻
同时干活
2.並行和併發的區別
併發是:
多个任务都在推进
並行是:
多个任务真的同时执行
所以一個程式可以:
- 有併發,但沒有並行:單核 CPU 上多個執行緒輪流執行;
- 有併發,也有並行:多核 CPU 上多個執行緒同時計算;
- 使用並行演算法,但不手動建立執行緒:讓標準庫或底層執行時決定怎樣執行。
3.並行不等於執行緒越多越快
執行緒數量超過硬體能同時執行的數量後,作業系統需要不斷切換執行緒。
執行緒切換、同步、鎖競爭、快取失效都會帶來額外開銷。
所以並行最佳化時要關心:
- 任務能不能拆開?
- 拆開以後是否足夠獨立?
- 每個任務的計算量是否足夠大?
- 任務之間是否頻繁爭搶同一份資料?
- 並行帶來的收益是否大於排程和同步成本?
4.C++ 中可能遇到的並行內容
後續可以繼續補充:
- 標準庫並行演算法;
- execution policy;
- 任務並行;
- 資料並行;
- SIMD 與向量化;
- 執行緒池與任務排程。
當前先預留這個位置,等併發基礎學完後再展開會更合適。