併發程式設計挑戰 死鎖與上下文切換

2021-10-01 10:45:09 字數 725 閱讀 3073

上下文切換(有時也稱做程序切換或任務切換)是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。上下文切換會影響多執行緒執行速度。死鎖是指多個程序或執行緒迴圈等待它方占有的資源而無限期地僵持下去的局面。

上下文定義

cpu發生程序或者執行緒切換時,所依賴的資料集合,比如乙個函式有外部變數,函式執行時,必須獲取外部變數,這些變數值的集合就是上下文。

引發問題

對於cpu密集型任務,多執行緒處理會發生上下文切換,會影響到執行速度,如果時io密集型,多執行緒技術優點盡顯。

如何減少上下文切換死鎖定義

死鎖是程序死鎖的簡稱,是由dijkstra於2023年研究銀行家演算法時首先提出來的。

系統發生死鎖現象不僅浪費大量的系統資源,甚至導致整個系統崩潰,帶來災難性後果。

產生死鎖原因

死鎖產生的必要條件

這四分條件是死鎖產生的必要條件,只要發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

如何避免死鎖

以確定的順序獲得鎖

加鎖時限

lock介面提供了boolean trylock(long time, timeunit unit) throws interruptedexception方法,該方法可以按照固定時長等待鎖,因此執行緒可以在獲取鎖超時以後,主動釋放之前已經獲得的所有的鎖。

併發 上下文切換。

即使是單核處理器也支援多執行緒執行 cpu通過給每個執行緒分配cpu時間片來實現這個機制。時間片是cpu分配給各個執行緒的時間,因為時間片非常短,所以cpu通過不停的切換執行緒執行,讓我們感覺多個執行緒是同時執行的,時間片一般是幾十毫秒 ms cpu通過時間片分配演算法來迴圈執行任務,當前任務執行乙...

上下文切換

1 系統呼叫 一次系統呼叫其實是發生了兩次cpu上下文的切換 首先將使用者態的cpu暫存器中的指令儲存在系統核心中。為了執行核心態 需要將暫存器更新為核心態指令的位置,然後跳轉到核心空間去執行任務。當核心態的指令執行完成的時候,cpu暫存器將恢復儲存在系統核心中的上一次執行的使用者態,然後切換到使用...

上下文切換

上下文切換 有時也稱做程序切換或任務切換 是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。上下文切換與模式切換 上下文切換只能發生在核心態中。核心態是 cpu 的一種有特權的模式,在這種模式下只有核心執行並且可以訪問所有記憶體和其他系統資源。其他的程式,如應用程式,在最開始都是執行在使用者...