什麼是上下文切換問題?
在單核心CPU架構中,對於多線程的運行是基於CPU時間片切換來實現的僞並行。由於時間片非常短導致用戶以爲是多個線程並行執行。而一次上下文切換,實際就是當前線程執行一個時間片之後切換到另外一個線程,並且保存當前線程執行的狀態這個過程。上下文切換會影響到線程的執行速度,對於系統來說意味着會消耗大量的CPU時間。
減少上下文切換的方式:
- 無鎖併發編程,在多線程競爭鎖時,會導致大量的上下文切換,避免使用鎖去解決併發問題可以減少上下文切換;
- CAS算法,CAS算法是一種樂觀鎖機制,不需要加鎖;
- 使用與硬件資源匹配合適的線程數
解決死鎖的手段:
- 保證多個線程按照相同的順序獲取鎖;
- 設置獲取鎖的超時時間,超時設定時間後自動釋放鎖;
- 死鎖檢測。
資源限制:
- 資源限制主要指的是硬件資源和軟件資源,在開發多線程應用時,程序的執行速度受限於這兩個資源。硬件的資源限制無非就是磁盤、CPU、內存、網絡;軟件資源的限制有很多,比如數據庫連接數、計算機能夠支持的最大連接數等;資源限制導致的問題最直觀的體現就是前面說的上下文切換,也就是CPU資源和線程資源的嚴重不均衡導致頻繁上下文切換,反而會造成程序的運行速度下降。
- 資源限制的主要解決方案,就是缺啥補啥。CPU不夠用,可以增加CPU核心數;一臺機器的資源有限,則增加多臺機器來做集羣。