核心態執行緒切換代價 vs 程序切換代價?

時間 2021-06-01 03:40:15

1樓:碼農的荒島求生

程序切換與執行緒切換的乙個最主要區別就在於程序切換涉及到虛擬位址空間的切換而執行緒切換則不會。因為每個程序都有自己的虛擬位址空間,而執行緒是共享所在程序的虛擬位址空間的,因此同乙個程序中的執行緒進行執行緒切換時不涉及虛擬位址空間的轉換。

舉乙個不太恰當的例子,執行緒切換就好比你從主臥走到次臥,反正主臥和次臥都在同乙個房子中(虛擬位址空間),因此你無需換鞋子、換衣服等等。但是程序切換就不一樣了,程序切換就好比從你家到別人家,這是兩個不同的房子(不同的虛擬位址空間),出發時要換好衣服、鞋子等等,到別人家後還要再換鞋子等等。

因此我們可以形象的認為執行緒是處在同乙個屋簷下的,這裡的屋簷就是虛擬位址空間,因此執行緒間切換無需虛擬位址空間的切換;而程序則不同,兩個不同程序位於不同的屋簷下,即程序位於不同的虛擬位址空間,因此程序切換涉及到虛擬位址空間的切換,這也是為什麼程序切換要比執行緒切換慢的原因。

2樓:owen

每個程序也有個跟程序同pid的執行緒。那麼這個問題就進化到多程序和多程序有什麼區別?

多程序會切換頁表的。

在社群裡可以看到一些非常規的效能測試,他們的切換耗時看起來幾乎差不多的。

程序內線程切換會觸發核心態與使用者態的切換嗎

圍軍兒 首先要了解,執行緒就是程序,就是建構函式 clone 的標誌位不太一樣而已,只是叫法不一樣,用的資料結構都是程序描述符,其實就是乙個東西。就好像黑馬 白馬一樣,沒有生殖隔離。程序內線程切換,本質上還是程序切換。只要程序切換,就必然已經進入了核心態。道理很簡單,只有核心才有權力進行程序排程,而...

為什麼協程切換的代價比執行緒切換低

艦長 我覺得這個問題得換個問法,結合實際使用場景 協程一般拿來撐併發用,也就是說大部分情況下系統執行的協程數量遠大於核數,在沒有協程的年代用生產者消費者模式,乙個協程相當於那個模式中的乙個task的概念,只是資料儲存在了棧上。這樣兩個模式對比是有意義的,在bthread的M N模型中,協程也有佇列的...

執行緒和核心什麼關係?

胡SIR 乙個核心需要乙個執行緒這就是乙個完整的任務,8核心同時可以有8個任務執行,當第九個任務來時這時就需要讓前面乙個任務停下來然後再去做另外乙個任務,如果你是16執行緒就不需要停下來,直接按照第九個執行緒的計畫直接去做任務這樣的結果就是不卡頓,但是結合現實的實際情況,一般我們8核心8個任務同時用...