美文网首页
线程池中线程数量如何设定

线程池中线程数量如何设定

作者: LandHu | 来源:发表于2020-05-08 16:50 被阅读0次

一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数)

  • 如果是CPU密集型应用,则线程池大小设置为N+1
  • 如果是IO密集型应用,则线程池大小设置为2N+1

如果一台服务器上只部署这一个应用并且只有这一个线程池,那么这种估算或许合理,具体还需自行测试验证。
但是,IO优化中,这样的估算公式可能更适合:
最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目
因为很显然,线程等待时间所占比例越高,需要越多线程。
线程CPU时间所占比例越高,需要越少线程。

下面举个例子:比如平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:((0.5+1.5)/0.5)*8=32。

这个公式进一步转化为:最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1) * CPU数目

同理,数据库连接池也不是越大越好

IO密集型  
Nthreads = NCPU * UCPU * (1 + W/C)
NCPU是处理器的核的数目,可以通过Runtime.getRuntime().availableProcessors()得到
UCPU是期望的CPU利用率(该值应该介于0和1之间)
W/C是等待时间与计算时间的比率

无IO操作
Nthreads=NCPU+1

技术讨论 & 疑问建议 & 个人博客

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议,转载请注明出处!

相关文章

  • 线程池中线程数量如何设定

    一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数) 如果是CPU密集型应用,则线程池大小设...

  • 3. Interview-JUC

    1 线程池原理 1.1 ThreadPoolExecutor构造器 corePoolSize:线程池中的线程数量 ...

  • 如何确定线程池中线程数量

    参数定义: 计算公式: 假设 CPU 一直处于使用状态,可以简化为: 总结: 一、计算密集型:假定 W = 0,则...

  • ThreadPoolExecutor学习笔记

    线程池状态: 高3位表示"线程池状态"低29位表示"线程池中的任务数量" Worker

  • 多线程基础(十一):interrupt深度分析

    [toc] 在前面学习ThreadPoolExecutor的时候,我们知道,当线程池中的线程数量大于核心线程数的时...

  • Java之线程池

    一、浩言 努力、努力、努力!!! 二、内容 2.1)、固定参数 corePoolSize:指定了线程池中的线程数量...

  • Python线程池ThreadPoolExecutor的使用

    ThreadPoolExecutor实际上是一个上下文管理器,可以设置池中线程数量,同时保证池中的每个线程都调用....

  • 线程池和队列

    线程池和队列相关概念 部分概念参考链接 1:核心线程:简单来讲就是线程池中能否允许同时并发运行的线程的数量。 2...

  • Java线程池

    为什么使用线程池: 减少创建和销毁线程的次数。 可以根据系统的承受能力,调整线程池中的线程的数量。 Java里面线...

  • 线程池几个重要参数

    corePoolSize 线程池中常驻线程核心线程数 maximumPoolSize 线程池中同时容纳可执行的线程...

网友评论

      本文标题:线程池中线程数量如何设定

      本文链接:https://www.haomeiwen.com/subject/mpzfnhtx.html