线程池参数配置

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

相关推荐
techdashen1 分钟前
Rust 社区在 4 月做了什么:项目管理月报解读
开发语言·rust·mfc
十五年专注C++开发2 分钟前
QFluentKit: 一个基于 Qt Widgets 的 Fluent Design 风格 UI 组件库
开发语言·c++·qt·ui·qfluentkit
lly2024064 分钟前
PHP JSON 使用指南
开发语言
沐知全栈开发9 分钟前
jQuery 尺寸
开发语言
Byte Wizard10 分钟前
C语言指针深入浅出5
c语言·开发语言
LucaJu13 分钟前
一次 OOM 线上排查实录
java·jvm·oom·内存溢出
csbysj202014 分钟前
Vue.js 监听属性
开发语言
Hesionberger22 分钟前
LeetCode 101:对称二叉树(多语言解法)
开发语言·python
小陈的进阶之路22 分钟前
Python系列课(11)——PySpark
开发语言·python·ajax
SimonKing23 分钟前
Firefox 太卡?换了这浏览器,内存占用直接降了 70%
java·后端·程序员