多執行緒程式設計中一般執行緒的個數都大於 cpu 核心的個數,而乙個 cpu 核心在任意時刻只能被乙個執行緒使用,為了讓這些執行緒都能得到有效執行,cpu 採取的策略是為每個執行緒分配時間片並輪轉的形式。
當乙個執行緒的時間片用完的時候就會重新處於就緒狀態讓給其他執行緒使用,這個過程就屬於一次上下文切換。
概括來說就是:當前任務在執行完 cpu 時間片切換到另乙個任務之前會先儲存自己的狀態,以便下次再切換回這個任務時,可以再載入這個任務的狀態。任務從儲存到再載入的過程就是一次上下文切換。上下文切換通常是計算密集型的。也就是說,它需要相當可觀的處理器時間,在每秒幾十上百次的切換中,每次切換都需要納秒量級的時間。所以,上下文切換對系統來說意味著消耗大量的 cpu 時間,事實上,可能是作業系統中時間消耗最大的操作。
linux 相比與其他作業系統(包括其他類 unix 系統)有很多的優點,其中有一項就是,其上下文切換和模式切換的時間消耗非常少。
多執行緒上下文切換
前言 併發程式設計的目的是為了讓程式執行得更快,但是並不是啟動更多的執行緒就能讓程式最大限度地併發執行。在進行併發程式設計時,如果希望通過多執行緒執行任務讓程式執行得更快,會面臨非常多的挑戰,比如上下文切換的問題 死鎖的問題,以及受限於硬體和軟體的資源限制問題,本文要研究的是上下文切換的問題。什麼是...
多執行緒上下文切換
在上下文切換過程中,cpu會停止處理當前執行的程式,並儲存當前程式執行的具體位置以便之後繼續執行。從這個角度來看,上下文切換有點像我們同時閱讀幾本書,在來回切換書本的同時我們需要記住每本書當前讀到的頁碼。在程式中,上下文切換過程中的 頁碼 資訊是儲存在程序控制塊 pcb 中的。pcb還經常被稱作 切...
多執行緒上下文切換
什麼是上下文切換 上下文切換 context switching 是儲存和恢復cpu狀態的過程,它使得執行緒執行能夠從中斷點恢復執行。上下文切換時多工作業系統和多執行緒環境的基本特徵。即使是單核cpu也支援多執行緒執行 cpu通過給每個執行緒分配cpu時間片來實現這個機制。時間片是cpu分配給各個執...