行业资讯 2025年08月6日
0 收藏 0 点赞 343 浏览 1168 个字
摘要 :

文章目录  扩展阅读 本文主要讲解关于Java如何合理配置核心线程数的参数相关内容,让我们来一起学习下吧! 核心线程池的参数设置一般各种网络资料中比较推崇的是N+1和2……




  •  扩展阅读

本文主要讲解关于Java如何合理配置核心线程数的参数相关内容,让我们来一起学习下吧!

核心线程池的参数设置一般各种网络资料中比较推崇的是N+1和2N法,即:

CPU 密集型任务(N+1)  :这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1。比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其它原因导致的任务暂停而带来的影响。一旦任务暂停,CPU 就会处于空闲状态,而在这种情况下多出来的一个线程就可以充分利用 CPU 的空闲时间。

I/O 密集型任务(2N)  :这种任务应用起来,系统会用大部分的时间来处理 I/O 交互,而线程在处理 I/O 的时间段内不会占用 CPU 来处理,这时就可以将 CPU 交出给其它线程使用。因此在 I/O 密集型任务的应用中,我们可以多配置一些线程,具体的计算方法是 2N。

如何判断是 CPU 密集任务还是 IO 密集任务?

CPU 密集型 :简单理解就是利用 CPU 计算能力的任务比如你在内存中对大量数据进行排序。

IO 密集型 :涉及到网络读取,文件读取这类都是 IO 密集型,这类任务的特点是 CPU 计算耗费时间相比于等待 IO 操作完成的时间来说很少,大部分时间都花在了等待 IO 操作完成上。

但是实际上比较科学的线程数计算方式是:

最佳线程数 = N(CPU 核心数)∗(1+WT(线程等待时间)/ST(线程计算时间))

WT(线程等待时间)= 线程运行总时间 – ST(线程计算时间)

线程等待时间所占比例越高,需要越多线程。线程计算时间所占比例越高,需要越少线程。(我们可以通过 JDK 自带的工具 VisualVM 来查看 WT/ST 比例)

CPU 密集型任务的 WT/ST 接近或者等于 0,因此, 线程数可以设置为 N(CPU 核心数)∗(1+0)= N,和我们上面说的 N(CPU 核心数)+1 差不多。IO 密集型任务下,几乎全是线程等待时间,从理论上来说,你就可以将线程数设置为 2N。

这里额外说一句早先我虽然知道线程池核心线程数应该和CPU核心线程数有关,但是悲剧的是我并不知道怎么查Linux系统的核心数,这里把查询命令贴出来供参考:

总核数 = 物理CPU个数 X 每颗物理CPU的核数 
查看物理CPU个数
cat /proc/cpuinfo| grep \"physical id\"| sort| uniq| wc -l

查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep \"cpu cores\"| uniq

 扩展阅读

之前有一篇文章深入验证了Java核心线程数的参数配置的详情,有兴趣可以参考《Java线程池大小、线程数量设置多少才合适》文章。

以上就是关于Java如何合理配置核心线程数的参数相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客(www.panziye.com),学习愉快哦!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9849.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

986
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

463
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

347
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

455
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

516
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

831
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号