Java併發程式設計的挑戰

2021-09-20 06:58:02 字數 625 閱讀 8684

併發程式設計的目的是為了讓程式執行得更快,但是,並不是執行緒啟動的越多,就能讓程式最大限度地併發執行。併發程式設計時,會面臨非常多的挑戰,比如上下文切換的問題,死鎖的問題,以及受限於各種硬體和軟體的資源限制問題。

cpu通過時間片分配演算法來迴圈執行任務,當前任務執行乙個時間後會切換到下乙個任務。但是,在切換前會儲存上乙個任務的狀態,以便下次切換回這個任務時,可以再載入到這個任務的狀態。從任務儲存到再載入的過程就是一次上下文切換。

vmstat 1#vmstat可以測試上下文切換的次數。輸出結果裡的cs(content switch)即表示上下文切換的次數。

減少上下文切換的方法有:無鎖併發程式設計,cas演算法,使用最少執行緒,使用協程。

使用最少執行緒:避免建立不需要的執行緒,比如任務很少,卻建立了很多執行緒來處理,造成大量執行緒都處於等待狀態(waiting)。

協程:在單執行緒裡實現多工的排程,並在單執行緒裡維持多個任務間的切換。

如何解決資源限制的問題?

對於硬體限制,可以考慮使用集群並行地執行程式。例如使用hadoop集群,不同的機器處理不同的資料。可以通過「資料id%機器數」,計算得到乙個機器編號,然後由對應編號的機器處理這筆資料。

對於軟體限制,可以考慮使用資源池將資源復用。比如使用連線池將資料庫和socket連線復用。

JAVA併發1 併發程式設計的挑戰

乙個cpu同一時刻只能執行乙個執行緒 cpu 通過給每個執行緒分配一定的時間片,時間片非常短,通常是幾十毫秒,來不停的切換執行緒執行任務,達到了多執行緒的效果。當執行緒用完自己的時間片後,及時任務還沒有完成,作業系統也會剝奪它的執行權,讓另一條執行緒執行。當一條執行緒的時間片用完後,作業系統會暫停該...

Java併發程式設計(二)之併發程式設計挑戰篇

在進行併發程式設計開發時,會面臨一些挑戰,主要包括三個方面 上下文切換 死鎖 資源限制 挑戰一 上下文切換的挑戰 上下文切換 單個cpu同乙個時刻只能執行一條執行緒,作業系統會給每條執行緒分配時間片來對執行緒進行排程操作,執行緒在得到的時間片內占用cpu資源處理自身資料,當作業系統從乙個執行緒切換到...

併發程式設計的挑戰

併發程式設計的目的是為了讓程式執行的更快,但是,並不是啟動更多的執行緒就能讓程式最大限度的併發執行。在進行併發程式設計的時候,如果希望通過多執行緒執行任務讓程式執行的更快,會面臨非常多的挑戰,比如 上下文切換的問題 死鎖的問題以及受限於硬體和軟體資源限制問題。cpu通過時間片分配演算法來迴圈執行任務...