看板 Programming 關於我們 聯絡資訊
※ 引述《CharArray (char[])》之銘言: : 我最核心的問題是,硬把2個不相干的multi-process轉成multi-thread的overhead : 但在只有一台實體電腦的狀況下,上述的情形在multi-process也都存在, : 甚至更多,那為什麼還算overhead呢? Context-Switch Overhead Thread 和 Process 的主要差別在於有沒有 "Shared Virtual Memory" 要切換 Thread 只需要把暫存器儲存起來, 可以只在User-space (註) 要切換 Process 則要把整個 Virtual Memory 換掉 Overhead 在於... 1. 換Page Table 要跳到 OS Level~ 很花時間了 2. 要把整個 L1 (Virtual) Cache 清掉 3. 運氣不好還會把 TLB 清光光 Performance 要"同時"執行多個 Thread 用單核有SMT的CPU就可以 要"同時"執行多個 Process 則要用多核CPU Linux SMP 可以把 Thread/Process 分給不同核心 不過現在PC都多核心了~ 如果你核心夠多的話, thread/process跑起來, 效率應該不會差太多 (我沒測, 這是只是我猜測) (註) User-space Thread雖然切換的Overhead較小, 但是OS不知道 不會把你配給其它的核心去執行 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.82.178