天天看點

Java 測試并行程式設計(三)

因為在并行代碼中的錯誤一般是低機率事件。是以,試運作并發差錯時需要反複多次,但是,有很多方法可以提高發現這些錯誤的機率 ,在前面提到的,在多處理器系統。假設 線程的數量,那麼 與單處理器的系統 或者 包括多個處理器的系統相比。将能産生很多其它的交替行為。

有一種實用的方法能提高交替操作的數量。以便能更有效的搜尋程式的狀态空間:就是在訪問狀态的操作中加上Thread.yield作為一個空操作。

當代碼在訪問狀态的時候沒有使用足夠的同步,将存在一些對運作時序敏感的錯誤。通過在某個操作的運作過程 中調用yield方法,能夠将這些錯誤暴露出來。

這樣的方法須要在測試 中加入一些調用而且在正式産品呂删除這些調用 。

性能測試要符合目前程式的應用場景。理想情況下應該反映出被測試對象的在應用程式中的實際使用方法。

第二個目标就是依據經驗值來調整各種不同的限值。比如線程數量,緩存容量等等。這些限值都依賴于平台特性,我們通常要合理的選擇這些值,使程式可以在很多其它的系統上良好的執行。

測試結果表明。LinkedBlockgingQueue的可伸縮性要高于ArrayBlockingQueue,初看起來這個結果似乎有些奇怪,連結清單隊列在每次插入元素時,都必須配置設定一個連結清單節點對象 ,這似乎比基于數組的隊列相比,連結清單隊列的put和take等方法支援并發性更高的訪問,由于一些優化後的連結隊列算法能将隊列頭節點的更新 操作與尾節點的更新操作分享開來。是以假設算法能通過多運作一些記憶體配置設定操作來減少競争 程度,那麼這樣的算法通常具有更高的可伸縮性。

版權聲明:本文部落格原創文章。部落格,未經同意,不得轉載。

繼續閱讀