thread vs coroutine(未允禁轉)

線程的上下文存儲在哪里

線程的上下文信息存儲在內核空間稱為線程控制塊(Thread Control Block,簡稱 TCB)的數據結構中。線程控制塊中包含了線程在內核態和用戶態的各種狀態信息,如寄存器值、程序計數器、棧指針、優先級、狀態等

當線程切換發生時,操作系統會保存當前線程在內核態以及用戶態的上下文信息到對應線程控制塊中,并從下一個要執行的線程的線程控制塊中恢復其上下文信息。當我們說“用戶態上下文信息會被保存在內核空間的數據結構中即TCB”時,我們是在討論線程從用戶態切換到內核態的情況,比如在進行系統調用或者處理硬件中斷時。在這種情況下,當前線程的用戶態上下文(如寄存器值、程序計數器等)需要被保存到TCB中,以便線程從內核態返回用戶態時可以恢復執行

如果線程尚未發生切換,那么TCB中是不會保存用戶態信息的。線程的用戶態上下文信息只有在線程從用戶態切換到內核態時(如進行系統調用或處理硬件中斷)才會被保存到TCB中

線程切換步驟拆解

  • os觸發線程切換:線程切換通常由操作系統的調度器觸發,可能的原因包括時間片用完、線程阻塞等。

  • 進入內核態:線程切換需要操作系統內核的支持,并且需要保存用戶態信息到內核態,因此進入內核態。如果切換觸發時線程在用戶態運行,那么從用戶態陷入內核態這個過程會導致明顯的性能開銷

    • 保存當前線程的用戶態和內核態上下文到TCB 開銷,以便在下次恢復執行時能夠從中斷點繼續。上下文信息包括程序計數器、寄存器值、棧指針等,這將產生性能開銷

    • 內存復制開銷:當從用戶態陷入內核態執行系統調用時,需要將系統調用的參數從用戶空間復制到內核空間,以及將系統調用的結果從內核空間復制回用戶空間。這個過程涉及到內存的讀寫操作,會產生一定的性能開銷。

    • 特權級變更:內核態和用戶態具有不同的特權級別,內核態具有更高的權限,可以訪問所有硬件資源和內存區域。在從用戶態切換到內核態時,需要修改處理器的特權級別,這個過程需要處理器執行特定的指令,會帶來額外的開銷。

  • 選擇下一個要運行的線程并恢復執行:操作系統調度器會根據調度算法選擇下一個要運行的線程。在開始執行新線程之前,需要恢復新線程的TCB,包括程序計數器、寄存器值、棧指針等。這將產生性能開銷

加粗部分體現了線程切換的主要開銷

協程切換的優勢體現在哪里

協程上下文信息(如寄存器值、程序計數器、棧指針等)通常保存在用戶空間的協程數據結構中

在進行協程切換時,協程運行時系統(可能是編程語言或庫提供的)會負責保存當前協程的上下文信息,并從下一個要運行的協程的數據結構中恢復其上下文信息。這個過程完全在用戶空間進行,不涉及內核態和用戶態的切換

當用戶態的協程切換時,關聯的內核態線程的TCB會發生什么變化?沒什么變化。協程的切換只需要由協程運行時系統保存舊上下文,恢復新上下文,在這個過程中,線程的用戶態棧指針會被協程運行時系統修改以指向新協程的棧空間,從而使線程能夠在用戶空間繼續執行

總結

  • 線程切換:用戶態和內存態的上下文都需要在內核空間保存和恢復
  • 協程切換:用戶態上下文由協程runtime負責保存和恢復,線程在內核態的TCB不需要做任何變動,線程對用戶態的協程切換完全無感
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374