跳到主要內容

發表文章

精選

進程 (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) 不恰當的使用可能導致性能不升反降 需根據具體任務特性選擇合適的並發模型 這樣的整理是否讓您...

最新文章

與其吵『核廢放你家』,不如看看芬蘭怎麼做

第三方登入時如果 同樣的 email 做自動綁定

拍影片

ChatGPt - 幫你畫流程圖

一個打打字就得到流程圖

一個指令 pull 所有git 分支

Homebrew 安裝 (Mac M1)

實用的常用工具 循序圖 Sequence Diagram

實用的常用工具捷鍵