Re: 不相干的程式做multi-thread有幫助嗎?
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 13 之 15 篇):