併發編程

什麼是上下文切換問題?

在單核心CPU架構中,對於多線程的運行是基於CPU時間片切換來實現的僞並行。由於時間片非常短導致用戶以爲是多個線程並行執行。而一次上下文切換,實際就是當前線程執行一個時間片之後切換到另外一個線程,並且保存當前線程執行的狀態這個過程。上下文切換會影響到線程的執行速度,對於系統來說意味着會消耗大量的CPU時間。

減少上下文切換的方式:

  1. 無鎖併發編程,在多線程競爭鎖時,會導致大量的上下文切換,避免使用鎖去解決併發問題可以減少上下文切換;
  2. CAS算法,CAS算法是一種樂觀鎖機制,不需要加鎖;
  3. 使用與硬件資源匹配合適的線程數

解決死鎖的手段:

  1. 保證多個線程按照相同的順序獲取鎖;
  2. 設置獲取鎖的超時時間,超時設定時間後自動釋放鎖;
  3. 死鎖檢測。

資源限制:

  1. 資源限制主要指的是硬件資源和軟件資源,在開發多線程應用時,程序的執行速度受限於這兩個資源。硬件的資源限制無非就是磁盤、CPU、內存、網絡;軟件資源的限制有很多,比如數據庫連接數、計算機能夠支持的最大連接數等;資源限制導致的問題最直觀的體現就是前面說的上下文切換,也就是CPU資源和線程資源的嚴重不均衡導致頻繁上下文切換,反而會造成程序的運行速度下降。
  2. 資源限制的主要解決方案,就是缺啥補啥。CPU不夠用,可以增加CPU核心數;一臺機器的資源有限,則增加多臺機器來做集羣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章