進程 (Process)、線程 (Thread)、協程 (Coroutine) 簡單清楚
基本概念階層
-
程式 (Program)
- 工程師寫好的程式碼集合(如Line、Chrome等應用)
- 特點:尚未執行,存放在硬碟等次級儲存裝置中
-
進程 (Process)
- 已被執行且載入到記憶體的程式
- 是作業系統分配資源的最小單位
- 每個進程有獨立的ID和資源空間(CPU時間、記憶體等)
-
線程 (Thread)
- 存在於進程內部
- 是作業系統進行運算排程的最小單位
- 一個進程至少有一個線程
- 同一進程內的線程可共享資源
-
協程 (Coroutine)
- 存在於線程內部
- 使用者態的輕量級執行緒
- 排程完全由使用者控制,而非作業系統
比喻說明
想像一個工作場景:
- 進程 = 工廠(提供資源和空間)
- 線程 = 工廠裡的工人(實際執行任務)
- 協程 = 工人手中可靈活切換的小任務
多進程與多線程
-
多進程 (Multiprocessing):
- 建立多個工廠,每個工廠有一名員工
- 優點:同時完成較多事情
- 適合:CPU密集型任務
-
多線程 (Multithreading):
- 在一個工廠內配置多名員工
- 優點:相同工作可在較短時間內完成
- 適合:I/O密集型任務
- 缺點:需注意線程間的資源競爭問題
並發與並行
-
並行 (Parallel):
- 利用多個CPU核心,真正的同時執行多個任務
- 如四個廚師同時在四個爐台上煮菜
-
並發 (Concurrent):
- 一個CPU快速切換執行多個任務,看似同時進行
- 如一個廚師在四個爐台間來回切換煮菜
協程的特點
-
輕量級:
- 建立成本低(KB級記憶體,而線程需要MB級)
- 切換成本低(比線程切換快)
-
使用者控制:
- 由程式控制調度,而非作業系統
- 系統甚至不知道協程的存在
-
高效利用資源:
- 當一個協程被阻塞時,可立即切換到另一個協程
- 避免線程阻塞造成的資源浪費
-
實際應用:
- Go語言的goroutine是協程的一個很好實現
- 適合需要大量並發但資源有限的場景
使用時的注意事項
- 多線程需注意避免資源競爭(Race Condition)和死結(Deadlock)
- 不恰當的使用可能導致性能不升反降
- 需根據具體任務特性選擇合適的並發模型
這樣的整理是否讓您更容易理解這些概念?如果有任何特定部分您希望我進一步解釋,請告訴我。

留言
張貼留言