1. 程式人生 > >執行緒優先順序使用不當,造成單核CPU跑滿

執行緒優先順序使用不當,造成單核CPU跑滿

最近在單核上跑應用時,碰到一個蛋疼的問題。問題浮現概率比較大。

最終通過排查程式碼發現原因為:含有鎖競爭的使用場景中,執行緒優先順序使用不當,單核將發生不可預料的情況。

場景復現下,比如,有兩個執行緒,一個是ThreadPriority.Highest,一個是ThreadPriority.Lowest;

當這兩個執行緒,在多核機器上跑時,通常情況下會跑在不同的核心上,那麼沒問題,但是,如果是跑在資源比較匱乏的單核機器上,比如單核虛擬主機。這時候,當低優先順序的執行緒鎖住了資源,但是又沒有釋放,同時又競爭不到時間片。。然後高優先順序的執行緒就在那裡等啊等等啊等,等到天荒地老。。。。。。

解決方案:重新調整優先順序的使用方案。

寫個程式驗證下,實際的時間片分配比例: