关于线程池配置的思考

首先线程池有几个核心配置参数:

CORE_SIZE: 核心线程数,当前线程池数量小于核心线程池数量时创建新线程,如果当前有空闲线程则取一个线程运行,除非特殊设置,核心线程不会销毁

BLOCKING_SIZE: 阻塞队列长度, 当核心线程满时,将当前请求放入阻塞队列中,等待核心线程执行完,出队列使用核心线程执行

MAX_POO_SIZE: 最大线程数,阻塞队列满时,仍有多余请求进来,创建新的线程放入池中,并处理当前请求,会保持keep_alive_time后自动销毁

电脑核心数:4

程序运行时间::1000ms

cpu运行时间:100ms

这是我使用一段模拟程序跑的核心线程数从1-300的一个并发请求的总请求时间的一个线图
 

我们比较熟悉的几个关于核心线程数的配置

1.io密集型cpu_core * 2 = 8

2.复合型cpu_core * (总时间/CPU运行时间)= 4 * (1000ms / 100ms) = 40

首先从图中我们可以看出前面随着核心线程数的增大,执行时间有一个比较明显的缩短,大致呈现一个线性的关系,后面随着核心线程数的增大,执行时间波动增大,且执行时间改善趋势递减,后面几乎没有改善

根据上面的图来思考一下线程池的一个配置

CORE_SIZE: 常驻线程,一个线程需要的栈帧大小默认为1M,因此不适合配置特别大,对于日常请求不是特别大的场景,核心线程数可以设置为cpu_core * 2 

BLOCKING_SIZE: 作为一个阈值,作为日常线程和高并发场景下线程的开关

MAX_POO_SIZE:最大线程数,在高并发场景时,应该最大的提升cpu的利用率,因此需要配置更大的线程数cpu_core * (总时间/CPU运行时间)

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值