Java 并发编程之线程池大小
Java juc 面试 大约 693 字说明
关于线程池大小的设置,有很多文章和经验公式,给出的答案不尽相同。
Java并发编程实战
《Java并发编程实战》:第8
章 - 线程池的使用。第141
页。
计算密集型
结论:Nthreads=Ncpu+1
在拥有多核CPU
的系统上,设置线程池的大小为CPN
的核数加1
,能实现最优的利用率。
即使当计算密集型的线程偶尔由于页缺失故障或其他原因暂停,这个额外的线程(加1
)也能确保CPU
的时钟周期不会被浪费。
I/O或阻塞密集型
Web
应用都是I/O
密集型。
Ncpu:CPU
核数。
Ucpu:期望的CPU
利用率。
W:CPU
等待的时间(可以理解为空闲时间)。
C:CPU
计算的时间。
结论:Nthreads=Ncpu*Ucpu*(1+W/C)
经验公式
线程数 = 核数 * 期望CPU
利用率 * 总时间 / CPU
计算时间
总时间:CPU
计算时间 + 等待时间
示例
例如:4
核CPU
计算时间为50%
,其他等待时间是50%
,期望CPU
被100%
利用。
计算:4*100%*100%/50%=8
例如:4
核CPU
计算时间为10%
,其他等待时间是90%
,期望CPU
被100%
利用。
计算:4*100%*100%/10%=40
并发编程网
相关数值设置可参考链接博客。
http://ifeve.com/how-to-calculate-threadpool-size
相关概念
阿姆达尔定律
原文:http://tutorials.jenkov.com/java-concurrency/amdahls-law.html
阅读 935 · 发布于 2021-11-15
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
JavaScript 对象阅读 998
-
Angular error TS2564: Property 'xx' has no initializer and is not definitely assigned in the constructor.阅读 387
-
AndroidStudio module 中依赖 arr 后,报 failed to resolve 错误的解决方法阅读 2237
-
CSS float 元素浮动后左右高度不一致解决办法阅读 3033
-
wget ERROR The certificate was signed using an insecure algorithm阅读 2092
-
走进 Rust:流程控制阅读 1742
-
nslookup 查询时指定 DNS 服务器阅读 1720
-
JavaScript/PHP 判断是否为微信内置浏览器阅读 2731
-
Spring Boot Maven 项目添加本地 jar 包依赖阅读 1369
-
软考-系统架构设计师:政府信息化与电子政务阅读 1683