线程数,射多少更舒适?

本文探讨了如何确定Java线程池中线程数的合理性,主要考虑CPU密集型和IO密集型任务。对于CPU密集型任务,理想的线程数通常等于CPU核心数+1,以避免过度的上下文切换。而对于IO密集型任务,线程数通常大于CPU核心数,以充分利用CPU资源。文章引用了Brian Goetz和Java虚拟机并发编程中的计算方法,并建议通过压测和监控实际调整线程数。
摘要由CSDN通过智能技术生成

我相信大家都用过线程池,但是线程池数量设置为多少比较合理呢?

线程数的设置的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能,因此让我们一起去探索吧!

首先要考虑到 CPU 核心数,那么在 Java 中如何获取核心线程数?

可以使用 Runtime.getRuntime().availableProcessor() 方法来获取(可能不准确,作为参考)

在确认了核心数后,再去判断是 CPU 密集型任务还是 IO 密集型任务:

  • CPU 密集型任务:比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务,大部分场景下都是纯 CPU 计算
  • IO 密集型任务:比如像 MySQL 数据库、文件的读写、网络通信等任务,这类任务不会特别消耗 CPU 资源,但是 IO 操作比较耗时,会占用比较多时间

在知道如何判断任务的类别后,让我们分两个场景进行讨论:

CPU 密集型任务

对于 CPU 密集型计算,多线程本质上是提升多核 CPU 的利用率,所以对于一个 8 核的 CPU,每个核一个线程,理论上创建 8 个线程就可以了。

如果设置过多的线程数,实际上并不会起到很好的效果。此时假设我们设置的线程数量是 CPU 核心数的 2 倍,因为计算任务非常重,会占用大量的 CPU 资源,所以这时 CPU 的每个核心工作基本都是满负荷的,而我们又设置了过多的线程,每个线程都想去利用 CPU 资源来执行自

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值