簡單的線程池(六)

◆ 概要

本文匯總了 簡單的線程池(三)簡單的線程池(四)簡單的線程池(五) 中的測試數據,並在此基礎上對比了 非阻塞共享式阻塞共享式非阻塞獨佔式阻塞獨佔式 這四個線程池的吞吐量指標。筆者對結果進行了分析,給出筆者的結論。如對測試方案、概念等有不明之處,請參考該博文

【注】非阻塞共享式 略稱為 LS,阻塞共享式 略稱為 BS,非阻塞獨佔式 略稱為 LU,阻塞獨佔式 略稱為 BU。

◆ 數據

圖1 ~ 圖3 匯總了四個線程池的平均吞吐量數據,以及以非阻塞共享式線程池的吞吐量為基準計算得出的差異。

  • 提交周期為 0.5 分鐘時的數據,

圖1

  • 提交周期為 1 分鐘時的數據,

圖2

  • 提交周期為 3 分鐘時的數據,

圖3

◆ 分析

圖4 列舉了 吞吐量1的差異 在 0.5 分鐘、1 分鐘和 3 分鐘的提交周期內不同思考時間上的對比。

圖4

【注】為了生成圖表,圖中底色為淺灰色的數據由 無意義值 調整為 0.00%。下同。

可以看到,

  • 當思考時間為 0 時,BS、LU、BU 的吞吐量優於 LS 的吞吐量;延長提交周期後,BS 的吞吐量更加優於 LS 的吞吐量,但 LU、BU 的吞吐量和 LS 的吞吐量差異沒有發生明顯變化;
  • 當思考時間不為 0 時,BS、BU 的吞吐量大幅優於 LS 的吞吐量,LU 的吞吐量劣於 LS 的吞吐量,但差異不會因提交周期的延長而大幅變化;隨着思考時間的增加,BS、LU、BU 的吞吐量與 LS 的吞吐量差異逐漸消失。

圖5 列舉了 吞吐量2的差異 在 0.5 分鐘、1 分鐘和 3 分鐘的提交周期內不同思考時間上的對比。

圖5

可以看到,

  • 當思考時間為 0 時,BS、BU 的吞吐量劣於 LS 的吞吐量,LU 的吞吐量略微優於 LS 的吞吐量;延長提交周期後,BS、BU 的吞吐量更加劣於 LS 的吞吐量,但 LU 和 LS 的吞吐量差異沒有發生明顯變化;
  • 當思考時間不為 0 時,因 LS、BS、LU、BU 的吞吐量均為 0,它們間沒有差異。

圖6 列舉了 吞吐量3的差異 在 0.5 分鐘、1 分鐘和 3 分鐘的提交周期內不同思考時間上的對比。

圖6

可以看到,

  • 當思考時間為 0 時,BS、LU、BU 的吞吐量略微優於 LS 的吞吐量;延長提交周期後,BS 的吞吐量更加優於 LS 的吞吐量,BU 的吞吐量和 LS 的吞吐量差異沒有發生明顯變化;
  • 當思考時間不為 0 時,BS、BU 的吞吐量大幅優於 LS 的吞吐量,LU 的吞吐量劣於 LS 的吞吐量,但差異不會因提交周期的延長而大幅變化;隨着思考時間的增加,BS、LU、BU 的吞吐量與 LS 的吞吐量差異逐漸消失。

◆ 結論

通過增加了共享式吞吐量與獨佔式吞吐量的對比,本次分析再次驗證了 簡單的線程池(三) 中的結論,即在思考時間不為 0 的情況下,

  • 在需要應對高頻並發的場合,採用阻塞式線程池的吞吐量指標會優於非阻塞式線程池的吞吐量指標;
  • 在需要應對低頻並發的場合,採用阻塞式線程池的吞吐量指標相當於非阻塞式線程池的吞吐量指標;
  • 在僅為分派並發任務的場合,採用阻塞式線程池的吞吐量指標會劣於非阻塞式線程池的吞吐量指標。

同時筆者認為,在考慮思考時間為 0 的極端情況下,

  • 獨佔式線程池的吞吐量指標會優於共享式線程池的吞吐量指標。

◆ 最後

完整的分析數據請參考 [github] cnblogs/15702250