线程池参数配置

上次面试被人问到,如果是IO 密集型的任务,该如何配置合适的线程数,当初我说要按照IO具体的请求毫秒时间,来配置具体的线程数。

java 复制代码
Nthreads=Ncpu*(1+w/c)
公式中 W/C 为系统 阻塞率  w:等待时间 c:计算时间

一般情况下,如果存在IO,那么肯定w/c>1(阻塞耗时一般都是计算耗时的很多倍),但是需要考虑系统内存有限(每开启一个线程都需要内存空间),这里需要上服务器测试具体多少个线程数适合(CPU占比、线程数、总耗时、内存消耗)。如果不想去测试,保守点取1即,Nthreads=Ncpu*(1+1)=2Ncpu。这样设置一般都OK

至于CPU 密集型 一般

java 复制代码
Nthreads=Ncpu+1 
w/c  =0 
理解也是正确的,+1 主要是防止因为系统上下文切换,让系统资源跑满!

面试官还问我,如果主要两种任务 一个耗时500ms, 另一种耗时200ms ,如何设置 线程数。

我当时 觉得应该用两个线程池 ,分别根据 W/C 设置最优参数。

如果用一个线程池 ,那就要根据两种任务的数量比重,统计出 耗时中位数?然后再根据 W/C 设置线程数。

相关推荐
沛沛老爹2 小时前
Skills高级设计模式(一):向导式工作流与模板生成
java·人工智能·设计模式·prompt·aigc·agent·web转型
ii_best2 小时前
安卓/ios脚本开发辅助工具按键精灵横纵坐标转换教程
android·开发语言·ios·安卓
程序员老徐2 小时前
Tomcat源码分析二(Tomcat启动源码分析)
java·tomcat·firefox
BD_Marathon2 小时前
SpringMVC——5种类型参数传递
android·java·数据库
a3158238062 小时前
Android 大图显示策略优化显示(二)
android·java·开发语言·javascript·kotlin·glide·图片加载
黛色正浓3 小时前
leetCode-热题100-普通数组合集(JavaScript)
java·数据结构·算法
月明长歌3 小时前
Java多线程线程池ThreadPoolExecutor理解总结:6 个核心参数 + 4 种拒绝策略(附完整示例)
java·开发语言
找不到、了3 小时前
JVM 跨代引用与 Card Table 机制
java·jvm
sunywz3 小时前
【JVM】(2)java类加载机制
java·jvm·python
学编程的小鬼3 小时前
JVM 常见的问题
开发语言·jvm