併發程式設計注意的問題

2022-03-17 12:47:26 字數 869 閱讀 2659

本文學習自博主凌瀾星空

併發是為了提高程式的執行速度,並不是執行緒越多越好,併發過程要注意三個問題:

1.上下文切換

2.死鎖

3.資源限制

1.執行緒的執行機制:

乙個cpu每一時刻只能執行一條主線程;

作業系統會給每條執行緒分配不同長度的時間片;

作業系統會隨機從就緒等待狀態的執行緒中隨機選取一條執行;

每條執行緒用完自己的時間片後,即使執行緒沒有執行完畢也會停止執行,作業系統隨機選取一條新執行緒執行;

2.上下文切換:當一條執行緒的時間片用完後,作業系統會停止該執行緒,並儲存當前執行緒的資訊狀態,然後選取一條新執行緒來執行。

3.上下文切換是有開銷的

每次上下文切換都需要儲存當前執行緒的執行狀態,並載入新執行緒先前狀態。如果上下文切換頻繁,那麼cpu花在上下文切換的時間佔比增加,真正處理任務的佔比就會減少,因此,為了提高處理任務的  效率,我們就要減少上線問起切換次數。

4.減少上下文切換次數

減少執行緒的數量

控制同一執行緒上鎖的數量

採用無鎖併發程式設計:1)無共享變數,獨立執行。2)有共享變數,控制執行順序(cas演算法)

1.死鎖:多條執行緒相互等待已經被對方占用的資源時產生。

2.如何避免死鎖

不要在乙個執行緒中巢狀使用多個鎖;

不要在乙個執行緒中巢狀占用多個計算機資源;

給鎖和資源加超時時間;

硬體資源:磁碟讀寫速度,頻寬等。

軟體資源:socket連線數,資料庫連線數等。

當程式執行執行緒時,並非是一行一行的執行**,要進行重排序。、

重排序:編譯器處理器在不改變程式結果的前提下,重新排列指令的執行順序,以達到最佳執行效率。

java併發程式設計(一) 併發程式設計需要注意問題

目錄 問題一上下文切換會帶來額外的開銷 執行緒的執行機制 什麼是上下文切換 上下文切換的過程 上下文切換是有開銷的 如何減少上下文切換 問題二併發不當可能會產生死鎖 什麼是死鎖 死鎖示例 如何避免死鎖 問題三計算機資源會限制併發 誤區執行緒越多速度越快 什麼是資源 如何解決資源的限制 併發是為了提公...

併發程式設計注意事項

一般在執行批處理的場景下,如果序列單執行緒的效率低,可以考慮併發,但是需要注意一些事情。首先需要確定,單個執行緒執行的場景下,耗時的 塊,一般的做法是通過列印執行時間,然後優化到合適的地步。採用多執行緒來執行任務,由於併發的不確定性以及併發引入的複雜性,要能夠保證併發處理的結果是正確的,是準確的。既...

併發程式設計中的注意事項

獲取單例物件需要保證執行緒安全,其中的方法也要保證執行緒安全。建立執行緒或執行緒池時請指定有意義的執行緒名稱,方便出錯時回溯。執行緒資源必須通過執行緒池提供,不允許在應用中自行顯式建立執行緒。執行緒池不允許使用 executors 去建立,而是通過 threadpoolexecutor 的方式,這樣...