线程池参数配置

上次面试被人问到,如果是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 设置线程数。

相关推荐
Nuanyt4 分钟前
JUC常见核心知识梳理02 AQS ReentrantLock CAS 原子类 线程池
java
CodeStats7 分钟前
【Java数据类型】Java底层数据类型原理(上):基本类型、转换与封装核心
java·数据类型·string·封装·转换
fengkai45457 分钟前
七、华为云网络综合实验 & 运维类及其他服务总结
服务器·开发语言·php
PHP实战开发录10 分钟前
PHP日志写满磁盘后接口为什么异常
开发语言·系统架构·php·开发
陈皮波比茶13 分钟前
SpringCloudAlibaba
java·spring cloud·微服务
重生之小比特14 分钟前
【Java SE】程序逻辑控制
java·开发语言·python
find1star16 分钟前
LeetCode 25:K 个一组翻转链表
java·数据结构·算法·leetcode·链表·职场和发展·动态规划
小灰灰搞电子19 分钟前
Python 函数参数分隔符 *:Keyword-Only Arguments 原理与实践
开发语言·python
染的人25 分钟前
Java 10x15cm面单PDF转换A4格式PDF
java·开发语言·pdf
泡海椒30 分钟前
JQuick-java (JQuick-ASM)性能优化原理:字节码生成与缓存机制深度解析
java·缓存·性能优化