串行、並行與並發的理解
標簽(空格分隔): 串行 並行 並發
1 串行和並行
串行是大家排隊一個一個來,並行是大家一起上。
2 並發和並行
概念非常相似,難以區分。分別體現在兩個方面。
- 並發(Concurrency),體現在(1)單個處理器;(2)邏輯上同步運行。
- 並行(Parallelism),體現在(1)多處理器,多核心;(2)物理上同步運行。
2.1 並行的理解
並行,是真正的同時運行--在同一個時刻多個任務同時執行。例如多核處理器上,有多個線程同時執行同一段代碼。單核處理器無法在同一時刻執行多個任務,因此無法並行。
2.2 並發的理解
並發有兩種描述,一種是形容多個任務的執行狀態;另一種是對“並發性”的簡稱。
2.2.1 多任務執行狀態
因為處理器處理特別快,看上去像同步執行。
- 兩個或者多個任務可以在某個重疊的時間段中啟動、運行、完成。
- 並行(多個線程同時執行)一定是並發,兩者是包含關系。
3個線程由一個CPU交替執行(並發)。
3個線程同時由多個CPU執行(並行且並發)。
2.2.2 “並發性”的簡稱
程序的部分可以無序或者同時執行,且不影響最終的執行結果,表示程序具有並發性。
“並發性”在不同核心數計算機上有着不同的表現。對於多核CPU,可以做到真實的同時運行,即並行;對於單核CPU,可以通過多個線程切換時間片交替運行,實現並發。
2.3 是什么讓並發和並行成為了可能
- CPU的升級。單核CPU一次只能處理一條指令,基於此增加核心數,多線程處理任務,提高效率。
- 操作系統的升級。單核CPU可以通過搶占式調度實現多個線程的切換;多線程如何分配核心是有操作系統來決定,開發人員只需要創建並運行多個線程。
- 編程語言的升級--支持多線程。