运维开发网

Java多线程中如何确定线程数

运维开发网 https://www.qedev.com 2022-05-26 15:25 出处:网络
创建线程和销毁线程都是比较耗时的操作,如果每个任务都创建一个线程去处理,这样线程会越来越多,那么应该如何确定线程的数量,本文就详细的介绍一下,感兴趣的可以了解一下

创建线程和销毁线程都是比较耗时的操作,如果每个任务都创建一个线程去处理,这样线程会越来越多,那么应该如何确定线程的数量,本文就详细的介绍一下,感兴趣的可以了解一下

关于多线程线程数的确定,最近看了几篇论文,这里做个笔记方便大家。

1.Java虚拟机并发编程简介。



即线程数= CPU的核数*(1-阻塞系数)

另一篇文章:java并发实践,即Java并发编程实践,给出了一个线程池大小的估算公式:


Nthreads=Ncpu*Ucpu*(1+w/c),其中Ncpu=CPU核心数,Ncpu = 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,那么在这种情况下,建议将cpu内核数的两倍考虑为线程数

2.对于计算密集型,阻塞时间趋于零,即w/c趋于零,公式Nthreads = Ncpu。

总结:

上述通用线程数公式只是用来计算的,实际应用中可以考虑很多方面,比如内存容量消耗、任务时间消耗等。,而且这个公式可以不断调整,适应场景。

关于如何在Java多线程中确定线程数量的文章到此结束。有关如何确定Java中线程数量的更多信息,请搜索SourceNet以前的文章或继续浏览下面的相关文章。希望大家以后多多支持SourceNet!


0

精彩评论

暂无评论...
验证码 换一张
取 消