Java多线程之如何确定线程数的方法

 更新时间:2022年03月21日 15:20:41   作者:xuzhujack  
创建线程和销毁线程都是比较耗时的操作,如果每个任务都创建一个线程去处理,这样线程会越来越多,那么应该如何确定线程的数量,本文就详细的介绍一下,感兴趣的可以了解一下

关于多线程的线程数的确定,最近研读过几篇paper,在此做一下笔记,方便使用时翻看。

1、《Java 虚拟机并发编程》中介绍

就是说:线程数 = CPU的核心数 * (1 - 阻塞系数)

另一篇:《Java Concurrency in Practice》即《java并发编程实践》,给出的线程池大小的估算公式:

Nthreads=Ncpu*Ucpu*(1+w/c),其中 Ncpu=CPU核心数,Ucpu=cpu使用率,0~1;W/C=等待时间与计算时间的比率

仔细推敲两个公式,其实类似,在cpu使用率达100%时,其实结论是一致的,这时候计算线程数的公式就成了,Nthreads=Ncpu*100%*(1+w/c) =Ncpu*(1+w/c)。

那么在实践应用中计算的公式就出来了,【以下推算,不考虑内存消耗等方面】,如下:

1、针对IO密集型的,阻塞耗时w一般都是计算耗时几倍c,假设阻塞耗时=计算耗时的情况下,Nthreads=Ncpu*(1+1)=2Ncpu,所以这种情况下,建议考虑2倍的CPU核心数做为线程数

2、对于计算密集型的,阻塞耗时趋于0,即w/c趋于0,公式Nthreads = Ncpu。

总结:

上面只是做出的较为普适的线程数公式推算,实际应用中可以会考虑多个方面,比如内存容量消耗,任务耗时等,可以对这个公式进行不断的场景调整适配。

到此这篇关于Java多线程之如何确定线程数的方法的文章就介绍到这了,更多相关Java 确定线程数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA如何加载resources文件夹下文件相对路径

    IDEA如何加载resources文件夹下文件相对路径

    这篇文章主要介绍了IDEA如何加载resources文件夹下文件相对路径问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java中Math.round()的用法及说明

    Java中Math.round()的用法及说明

    这篇文章主要介绍了Java中Math.round()的用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 深度思考JDK8中日期类型该如何使用详解

    深度思考JDK8中日期类型该如何使用详解

    这篇文章主要介绍了JDK8中日期类型该如何使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Java数据结构之图的两种搜索算法详解

    Java数据结构之图的两种搜索算法详解

    在很多情况下,我们需要遍历图,得到图的一些性质。有关图的搜索,最经典的算法有深度优先搜索和广度优先搜索,接下来我们分别讲解这两种搜索算法,需要的可以参考一下
    2022-11-11
  • Springboot实现接口传输加解密的步骤详解

    Springboot实现接口传输加解密的步骤详解

    这篇文章主要给大家详细介绍了Springboot实现接口传输加解密的操作步骤,文中有详细的图文解释和代码示例供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-09-09
  • 简单易懂的Java Map数据添加指南

    简单易懂的Java Map数据添加指南

    Java提供了多种方法来往Map中添加数据,开发者可以根据具体需求选择合适的方法,需要的朋友可以参考下
    2023-11-11
  • Java Springboot异步执行事件监听和处理实例

    Java Springboot异步执行事件监听和处理实例

    Java SpringBoot中,监听和处理事件是一种常见的模式,它允许不同的组件之间通过事件进行通信,事件监听和处理通常通过Spring的事件发布-订阅模型来实现,一个简单的Spring Boot应用程序示例,其中将包括事件的定义、事件的发布以及事件的监听
    2024-07-07
  • 图文详解JAVA实现哈夫曼树

    图文详解JAVA实现哈夫曼树

    所谓哈夫曼树就是要求最小加权路径长度,这是什么意思呢?简而言之,就是要所有的节点对应的路径长度(高度-1)乘以该节点的权值,然后保证这些结果之和最小。下面这篇文章就给大家详细介绍
    2016-08-08
  • 在IDEA中maven配置MyBatis的流程详解

    在IDEA中maven配置MyBatis的流程详解

    刚学完javaweb,对自己的Dao层代码很不满意的话,可得来学学MyBatis.学习MyBatis既可以改进JDBC的使用,实现Dao层也会变得很简便,下面我将介绍IDEA中maven配置MyBatis简单流程,需要的朋友可以参考下
    2021-06-06
  • Redis如何实现分布式锁详解

    Redis如何实现分布式锁详解

    分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁.本篇文章将介绍第二种方式,基于Redis实现分布式锁,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06

最新评论