簡單的執行緒池(六)

cnblogs發表於2021-12-17

◆ 概要

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

【注】非阻塞共享式 略稱為 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

相關文章