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