https://en.wikipedia.org/wiki/Context_switch
在計算中,背景關系切換是存盤行程或執行緒狀態的程序,以便稍后可以恢復并恢復執行,然后恢復以前保存的不同狀態。 [1] 這允許多個行程共享一個中央處理單元 (CPU),并且是多任務作業系統的基本特征。
短語“背景關系切換”的確切含義各不相同。在多任務背景關系中,它是指為一個任務存盤系統狀態的程序,以便可以暫停任務并恢復另一個任務。背景關系切換也可能是中斷的結果,例如當一個任務需要訪問磁盤存盤,為其他任務釋放 CPU 時間時。一些作業系統還需要背景關系切換以在用戶模式和內核模式任務之間移動。背景關系切換程序會對系統性能產生負面影響。 [2]: 28
第二個問題2):
如果我理解正確,在單核處理器上一次只能執行一個執行緒(這就是為什么背景關系切換是不可避免的),所以存在虛擬并行性。
那么,不使用鎖(如互斥鎖等)來訪問單核處理器上的共享資源(變數)是否完全安全(現在幾乎沒有這樣的處理器,但將其視為“理論”問題)?謝謝
uj5u.com熱心網友回復:
不使用鎖(如互斥鎖等)訪問單核處理器上的共享資源(變數)是否完全安全?
可能不是。如果代碼在協作多任務機制下運行,并且如果程式員注意確保在共享變數處于某些無效狀態時沒有執行緒執行任何屈服點,則它可能是安全的。但是,如今大多數作業系統都使用搶占式多任務處理,其中作業系統可以隨時將 CPU 從一個執行緒中取出并交給另一個執行緒,并且不會發出警告。
在為單 CPU 系統撰寫多執行緒代碼時(見下文,了解更多資訊),不必像為SMP架構或NUMA架構編程那樣擔心系統的記憶體模型,但仍然必須考慮注意防止螺紋相互干擾。
(現在幾乎沒有這樣的處理器......)
哈!試著告訴嵌入式軟體開發人員(例如,我自己)。如今,單 CPU 計算機嵌入了各種不同的東西。你的微波爐、恒溫器、CPAP 呼吸機、藍牙耳機……你的車里可能有幾十個。移動機器人或復雜的自動化工廠裝配線也可能如此。
uj5u.com熱心網友回復:
是的,背景關系切換發生在多核處理器上,原因與單核處理器相同。
不,當然,讓多個執行緒在沒有鎖的情況下訪問共享資源并不總是安全的。不管你有多少核心。(僅當您對“安全”和“共享資源”的含義使用非常非常有限的定義時。)
如果您有兩個執行緒使用相同的共享變數運行如下代碼:
read variable
mutate value
write result back to variable
然后,如果在此序列的中間發生背景關系切換,并且您對變數沒有互斥鎖,您將得到不一致的結果。“不一致”很容易包含導致記憶體泄漏或程式崩潰的行為:想象一下變數是否是鏈表或樹等資料結構的一部分。這一點不需要單獨的核心。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531159.html
