如何计算线程数的最优值?——咱有公式

简介: 如何计算线程数的最优值?——咱有公式

计算出应该用于应用程序的理论最优线程数非常简单。但是,您需要了解应用程序运行时特征。它主要是CPU密集型工作还是主要等待IO?

在这篇博客中,我们将介绍如何为基于CPU和IO的任务计算出良好的线程池大小。


CPU绑定任务


对于CPU绑定任务,Goetz建议:

threads = number of CPUs + 1

很显然,如果CPU一直处于工作状态,就不能再做其它的工作。Goetz声称的额外的线程(加的1个)已被证明是一种提高而不是省略它。但是其他人不同意,认为线程数等于CPU数量是最佳的。


I/O绑定任务


计算IO绑定任务的最优值不是太明显。在 IO绑定任务期间,CPU将处于空闲状态(等待或阻塞)。此空闲时间可以更好地用于启动另一个IO绑定请求。


Subramaniam(2011,p.31)用以下公式描述了最佳线程数,

threads = number of cores /  (1 – blocking coefficient)

image.png

在Goetz(2002)描述最优的线程数计算公式如下,

threads = number of cores * (1 + wait time / service time)

image.png

我们可以将wait time / service time视为衡量任务争用程度的指标。


Goetz 和 Subramaniam 统一意见


出于兴趣,我们可以证明两个IO绑定公式都是等价的。 从Goetz的公式开始,我们设w + s = 1,消掉s后会出现,

image.png

化简得到,

image.png

相关文章
|
4月前
|
前端开发 JavaScript 大数据
React与Web Workers:开启前端多线程时代的钥匙——深入探索计算密集型任务的优化策略与最佳实践
【8月更文挑战第31天】随着Web应用复杂性的提升,单线程JavaScript已难以胜任高计算量任务。Web Workers通过多线程编程解决了这一问题,使耗时任务独立运行而不阻塞主线程。结合React的组件化与虚拟DOM优势,可将大数据处理等任务交由Web Workers完成,确保UI流畅。最佳实践包括定义清晰接口、加强错误处理及合理评估任务特性。这一结合不仅提升了用户体验,更为前端开发带来多线程时代的全新可能。
103 1
|
5月前
|
并行计算 Java 大数据
Java中的高效并行计算与多线程编程技术
Java中的高效并行计算与多线程编程技术
|
5月前
|
设计模式 并行计算 安全
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
52 0
|
5月前
|
并行计算 Java 大数据
Java中的高效并行计算与多线程编程技术
Java中的高效并行计算与多线程编程技术
|
Java
Java并发计算判断线程池中的线程是否全部执行完毕
Java并发计算判断线程池中的线程是否全部执行完毕
103 0
|
负载均衡 并行计算 算法
BWA序列比对方法丨针对较大基因组的并行计算和性能优化方式,利用多线程和负载均衡策略提高效率
BWA序列比对方法丨针对较大基因组的并行计算和性能优化方式,利用多线程和负载均衡策略提高效率
|
并行计算
R语言多线程使用方法,充分利用计算资源实现高效计算,缩短等待时间
R语言多线程使用方法,充分利用计算资源实现高效计算,缩短等待时间
|
并行计算 Java
java多线程并行计算求数组和
java多线程并行计算求数组和
166 0
|
并行计算 Java API
FutureTask原理解析-java多线程(实现并行计算)
FutureTask原理解析-java多线程(实现并行计算)
218 0
FutureTask原理解析-java多线程(实现并行计算)
|
并行计算 负载均衡 算法
线程安全集合和并行计算介绍 | 学习笔记
快速学习线程安全集合和并行计算介绍
线程安全集合和并行计算介绍 | 学习笔记