线程池参数配置

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

相关推荐
invicinble5 分钟前
seata的认识与实际开发要做的事情
java
今晚务必早点睡8 分钟前
写一个Python接口:发送支付成功短信
开发语言·python
jghhh0117 分钟前
基于C#实现与三菱FX系列PLC串口通信
开发语言·算法·c#·信息与通信
ada7_19 分钟前
LeetCode(python)22.括号生成
开发语言·数据结构·python·算法·leetcode·职场和发展
喵了meme24 分钟前
C语言实战练习
c语言·开发语言
imkaifan28 分钟前
bind函数--修改this指向,返回一个函数
开发语言·前端·javascript·bind函数
乌日尼乐28 分钟前
【Java基础整理】Java多线程
java·后端
love530love35 分钟前
EPGF 新手教程 12在 PyCharm(中文版 GUI)中创建 Poetry 项目环境,并把 Poetry 做成“项目自包含”(工具本地化为必做环节)
开发语言·ide·人工智能·windows·python·pycharm·epgf
White_Can40 分钟前
《C++11:列表初始化》
c语言·开发语言·c++·vscode·stl
White_Can1 小时前
《C++11:右值引用与移动语义》
开发语言·c++·stl·c++11