简单的线程池(六)

本文汇总了 《简单的线程池(三)》《简单的线程池(四)》《简单的线程池(五)》 中的测试数据,并在此基础上对比了 非阻塞共享式阻塞共享式非阻塞独占式阻塞独占式 这四个线程池的吞吐量指标。笔者对结果进行了分析,给出笔者的结论。如对测试方案、概念等有不明之处,请参考该博文

【注】非阻塞共享式 略称为 LS,阻塞共享式 略称为 BS,非阻塞独占式 略称为 LU,阻塞独占式 略称为 BU。

◆ 数据

图1 ~ 图3 汇总了四个线程池的平均吞吐量数据,以及以非阻塞共享式线程池的吞吐量为基准计算得出的差异。

  • 提交周期为 0.5 分钟时的数据,
    gathering1
图1
  • 提交周期为 1 分钟时的数据,
    gathering2
图2
  • 提交周期为 3 分钟时的数据,
    gathering3
图3

◆ 分析

图4 列举了 吞吐量1的差异 在 0.5 分钟、1 分钟和 3 分钟的提交周期内不同思考时间上的对比。

vs1

图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 分钟的提交周期内不同思考时间上的对比。

vs2

图5

可以看到,

  • 当思考时间为 0 时,BS、BU 的吞吐量劣于 LS 的吞吐量,LU 的吞吐量略微优于 LS 的吞吐量;延长提交周期后,BS、BU 的吞吐量更加劣于 LS 的吞吐量,但 LU 和 LS 的吞吐量差异没有发生明显变化;
  • 当思考时间不为 0 时,因 LS、BS、LU、BU 的吞吐量均为 0,它们间没有差异。

图6 列举了 吞吐量3的差异 在 0.5 分钟、1 分钟和 3 分钟的提交周期内不同思考时间上的对比。

vs3

图6

可以看到,

  • 当思考时间为 0 时,BS、LU、BU 的吞吐量略微优于 LS 的吞吐量;延长提交周期后,BS 的吞吐量更加优于 LS 的吞吐量,BU 的吞吐量和 LS 的吞吐量差异没有发生明显变化;
  • 当思考时间不为 0 时,BS、BU 的吞吐量大幅优于 LS 的吞吐量,LU 的吞吐量劣于 LS 的吞吐量,但差异不会因提交周期的延长而大幅变化;随着思考时间的增加,BS、LU、BU 的吞吐量与 LS 的吞吐量差异逐渐消失。

◆ 结论

通过增加了共享式吞吐量与独占式吞吐量的对比,本次分析再次验证了 《简单的线程池(三)》 中的结论,即在思考时间不为 0 的情况下,

  • 在需要应对高频并发的场合,采用阻塞式线程池的吞吐量指标会优于非阻塞式线程池的吞吐量指标;
  • 在需要应对低频并发的场合,采用阻塞式线程池的吞吐量指标相当于非阻塞式线程池的吞吐量指标;
  • 在仅为分派并发任务的场合,采用阻塞式线程池的吞吐量指标会劣于非阻塞式线程池的吞吐量指标。

同时笔者认为,在考虑思考时间为 0 的极端情况下,

  • 独占式线程池的吞吐量指标会优于共享式线程池的吞吐量指标。

◆ 最后

完整的分析数据请参考 [gitee] cnblogs/15702250

posted @   green-cnblogs  阅读(308)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示