進程 (Process)、線程 (Thread)、協程 (Coroutine) 簡單清楚

基本概念階層

  1. 程式 (Program)

    • 工程師寫好的程式碼集合(如Line、Chrome等應用)
    • 特點:尚未執行,存放在硬碟等次級儲存裝置中
  2. 進程 (Process)

    • 已被執行且載入到記憶體的程式
    • 是作業系統分配資源的最小單位
    • 每個進程有獨立的ID和資源空間(CPU時間、記憶體等)
  3. 線程 (Thread)

    • 存在於進程內部
    • 是作業系統進行運算排程的最小單位
    • 一個進程至少有一個線程
    • 同一進程內的線程可共享資源
  4. 協程 (Coroutine)

    • 存在於線程內部
    • 使用者態的輕量級執行緒
    • 排程完全由使用者控制,而非作業系統

比喻說明

想像一個工作場景:

  • 進程 = 工廠(提供資源和空間)
  • 線程 = 工廠裡的工人(實際執行任務)
  • 協程 = 工人手中可靈活切換的小任務

多進程與多線程

  • 多進程 (Multiprocessing)

    • 建立多個工廠,每個工廠有一名員工
    • 優點:同時完成較多事情
    • 適合:CPU密集型任務
  • 多線程 (Multithreading)

    • 在一個工廠內配置多名員工
    • 優點:相同工作可在較短時間內完成
    • 適合:I/O密集型任務
    • 缺點:需注意線程間的資源競爭問題

並發與並行

  • 並行 (Parallel)

    • 利用多個CPU核心,真正的同時執行多個任務
    • 如四個廚師同時在四個爐台上煮菜
  • 並發 (Concurrent)

    • 一個CPU快速切換執行多個任務,看似同時進行
    • 如一個廚師在四個爐台間來回切換煮菜

協程的特點

  1. 輕量級

    • 建立成本低(KB級記憶體,而線程需要MB級)
    • 切換成本低(比線程切換快)
  2. 使用者控制

    • 由程式控制調度,而非作業系統
    • 系統甚至不知道協程的存在
  3. 高效利用資源

    • 當一個協程被阻塞時,可立即切換到另一個協程
    • 避免線程阻塞造成的資源浪費
  4. 實際應用

    • Go語言的goroutine是協程的一個很好實現
    • 適合需要大量並發但資源有限的場景

使用時的注意事項

  • 多線程需注意避免資源競爭(Race Condition)和死結(Deadlock)
  • 不恰當的使用可能導致性能不升反降
  • 需根據具體任務特性選擇合適的並發模型

這樣的整理是否讓您更容易理解這些概念?如果有任何特定部分您希望我進一步解釋,請告訴我。

留言

熱門文章