线程池参数配置

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

相关推荐
總鑽風12 小时前
单点登录sso 微服务加网关gateway
java·微服务·gateway·jwt·单点登录
blxr_12 小时前
MySql锁机制
java·开发语言
花里胡哨的菜只因12 小时前
IDEA 编译 Maven 项目报 Malformed \uxxxx encoding
java·maven·intellij-idea
此生决int12 小时前
C++快速上手java备战期末考——初识java
java·c++·期末复习
Jing_jing_X12 小时前
通义灵码Lingma IDE:解决你的提示词焦虑
java·ide·ai
计算机安禾12 小时前
【c++面向对象编程】第13篇:继承(三):同名隐藏与作用域覆盖
开发语言·c++·iphone
ch.ju12 小时前
Java Programming Chapter 3——Dynamic acquisition of array
java·开发语言
XS03010613 小时前
Java Web实现简易CRUD操作笔记
java·前端·笔记
TechWayfarer13 小时前
AI的幻觉谁来买单?智能体时代的数据溯源与鉴权
开发语言·python·安全·ai
Str_Null13 小时前
Python 自动线性化 HTML/MD 表格的工程实践(一个读取表格并且提供输出的工具)
开发语言·python·html