[转帖]技术派-关于最佳线程数的计算的准确理解

技术,关于,最佳,线程,计算,准确,理解 · 浏览次数 : 0

小编点评

**最优线程数的计算方法:** 1. **核心数:** CPU 执行核心数 2. **阻塞系数:** 线程等待处理完任务所需的时间比例 3. **线程数量:**核心数 / (1 - 阻塞系数) **最佳线程数量:** * **计算式:** Number of threads = Number of Available Cores / (1 - Blocking Coefficient) * **最佳线程数量 = CPU 执行核心数 / (1 - 阻塞系数)** **最佳线程数量的解释:** * 核心数是指 CPU 可以处理的最大并发任务数量。 * 阻塞系数是指任务等待处理完所需的时间比例。 * 当线程数量过少时,任务需要频繁切换线程,导致上下文切换时间增加,降低性能。 * 当线程数量过大时,阻塞系数降低,线程切换时间减少,性能提升。 **示例:** * 核心数为 4,阻塞系数为 0.5。 *最佳线程数量为 8。 **结论:** * 在大多数情况下,最佳线程数量为核心数的 2 到 4 倍。 * 即使全系统只运行一个程序,也应该考虑线程数量,以优化性能。

正文

Venkat Subramaniam 博士在《Programming Concurrency on the JVM》中提到关于最优线程数的计算:

  1. The minimum number of threads is equal to the number of available cores.
  2. If all tasks are computation intensive, then this is all we need.
  3. Having more threads will actually hurt in this case because cores
  4. would be context switching between threads when there is still work to do.
  5. If tasks are IO intensive, then we should have more threads.
  6. We can compute the total number of threads we’d need as follows:
  7. Number of threads = Number of Available Cores / (1 - Blocking Coefficient)
  8. To determine the number of threads, we need to know two things:
  9. • The number of available cores
  10. • The blocking coefficient of tasks

根据描述,最佳线程数量=CPU执行核心数/(1-阻塞系数)

许多程序员就立马写个程序测试,模拟一个阻塞系数0.5的线程,硬件配置CPU执行核心数是4,恰好2倍核心数,最佳线程数量是8,然后就开8个线程去处理。测试完成任务处理时间是316ms。以为这样是最佳了。然后又抱着怀疑的态度再做一轮测试,特意开16个线程去一跑,发现时间只用了215ms。更少了。咦?怎么回事呢?然后得出结论:最佳线程数量并非最佳。 4倍才是最佳的。是这样吗?问题出在哪里了呢?

其实,如果全系统只运行你一个程序,只考虑测试代码,阻塞系数是0.5,当然是没错的,但是这个公式是针对全系统而言的,需要把全系统所有程序的线程占用的timeslice都计算在内考虑。理论计算是需要考虑所有细节的,这些细节占用的时间可一点不少。

当全系统线程数量远远大于执行核心数,则增加了线程的上下文环境交换时间等等,还有其他线程分走了许多CPU时间片,这部分时间可不少,可是却没有用在你的测试计算上。为简化理解,直接把这部分时间都划算到阻塞时间上,等于说阻塞系数变大,纯工作系数变小;分母就变小了,最佳线程数量就成倍增大了。

如果还不理解,我举个例子,用实际场景来解释就明白了。

一个加工厂有4条加工流水线,每一个人同时只能占用一条流水线加工自己的产品,假定一个人占据一条加工流水线完全饱和工作8小时能完成自己的加工,那么拆分到4条线上显然2小时可以加工完成,理论上。

再假定人的饱和工作时间和空闲时间各占50%呢(构造阻塞系数0.5),在不考虑交班交接的时间,显然8个人同时排队加工才能在2小时完成,(加工厂只安排你的8个人)。

但是事实工厂工况是怎么样的呢?这个加工厂有1000人在排队等着加工自己的产品(你安排了8个人过去加工你的产品 + 992个外人),而且,一条流水线线上工作内容切换时,前一个人和后一个人交替交接需要占用不少时间,而且,992个外人也各自要加工自己的产品,分配给你那8个人的时间片机会就少了。那些时间都没为你的产品加工,都直接是划归到阻塞时间上去,阻塞系数变大,最佳线程数=CPU执行核心数/(1-阻塞系数), 分母变小,结果自然变大。如果你要获得更多的时间片,你就要安排更多人过去,增大占时间片的机会。

所以你安排8个人去加工,肯定2小时完成不了,可能实际用了3小时才加工完成。但是你若安排16个人过去排队加工,可能2.5小时就能加工完成了。

如此而已。如有疑问,站内私信消息或留言。

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览101505 人正在系统学习中

与[转帖]技术派-关于最佳线程数的计算的准确理解相似的内容:

[转帖]技术派-关于最佳线程数的计算的准确理解

Venkat Subramaniam 博士在《Programming Concurrency on the JVM》中提到关于最优线程数的计算: The minimum number of threads is equal to the number of available cores. If a

[转帖]终于搞懂了服务器为啥产生大量的TIME_WAIT!

http://www.yunweipai.com/40430.html 运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维 写在开头,大概 4

[转帖]如何提高Linux下块设备IO的整体性能?

http://www.yunweipai.com/6989.html 运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维 作者介绍 邹立巍 Li

[转帖]Linux块层技术全面剖析-v0.1

Linux块层技术全面剖析-v0.1 perftrace@gmail.com 前言 网络上很多文章对块层的描述散乱在各个站点,而一些经典书籍由于更新不及时难免更不上最新的代码,例如关于块层的多队列。那么,是时候写一个关于linux块层的中文专题片章了,本文基于内核4.17.2。 因为文章中很多内容都

[转帖]煮饺子与 docker、kubernetes 之间的关系

前言:云原生的概念最近非常火爆,企业落地云原生的愿望也越发强烈。看过很多关于云原生的文章,要么云山雾罩,要么曲高和寡。 所以笔者就有了写《大话云原生》系列文章的想法,期望用最通俗、简单的语言说明白什么是云原生。那么,开始吧,这是第一篇! 这真的是一篇讲架构技术的文章,不是小说,不是口水!建议您看下去

[转帖]mysql百万级性能瓶颈-数据库选型

项目中使用了mysql数据库,但数据量增长太快,不久到了百万级,很快又到表到了千万级,尝试了各种优化方式,最终效果仍难达到秒级响应,那么引发了我关于数据库选型到一些思考。 1、mysql的单表性能瓶颈究竟是多少? 曾经在中国互联网技术圈广为流传着这么一个说法:MySQL 单表数据量大于 2000 万

[转帖]mysql百万级性能瓶颈-数据库选型

项目中使用了mysql数据库,但数据量增长太快,不久到了百万级,很快又到表到了千万级,尝试了各种优化方式,最终效果仍难达到秒级响应,那么引发了我关于数据库选型到一些思考。 1、mysql的单表性能瓶颈究竟是多少? 曾经在中国互联网技术圈广为流传着这么一个说法:MySQL 单表数据量大于 2000 万

[转帖]阿里达摩院最新存算芯片技术解读

https://zhuanlan.zhihu.com/p/448261354 陈巍谈芯: 12月3日,阿里达摩院成功研发新型架构芯片,已经被证明能够在阿里推荐系统中发挥极大的应用价值,并受到技术圈的普遍关注。 据悉这颗芯片与数据中心的推荐系统对于带宽/存储的需求完美匹配,大幅提升带宽的同时还实现了超

[转帖]阿里达摩院最新存算芯片技术解读

https://zhuanlan.zhihu.com/p/448261354 12月3日,阿里达摩院成功研发新型架构芯片,已经被证明能够在阿里推荐系统中发挥极大的应用价值,并受到技术圈的普遍关注。 据悉这颗芯片与数据中心的推荐系统对于带宽/存储的需求完美匹配,大幅提升带宽的同时还实现了超低功耗,充分

[转帖]关于第四代Intel Xeon Scalable的一些技术思考

https://zhuanlan.zhihu.com/p/598702329 前两天,代号Sapphire Rapids的第四代Intel Xeon Scalable处理器正式发布了,本文算是我的一点技术思考吧,顺便和大家交流下。由于我水平和手头资料都有限,目前还只能是旁观的视角,如有任何错误不足欢