线程池参数配置

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

相关推荐
云和数据.ChenGuang5 分钟前
PHP-FPM返回的File not found.”的本质
开发语言·php·运维工程师·运维技术
It's now5 分钟前
Spring AI 基础开发流程
java·人工智能·后端·spring
cxh_陈5 分钟前
线程的状态,以及和锁有什么关系
java·线程·线程的状态·线程和锁
计算机毕设VX:Fegn08958 分钟前
计算机毕业设计|基于springboot + vue图书商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
R.lin20 分钟前
Java 8日期时间API完全指南
java·开发语言·python
毕设源码-赖学姐26 分钟前
【开题答辩全过程】以 高校教学质量监控平台为例,包含答辩的问题和答案
java·eclipse
高山上有一只小老虎33 分钟前
翻之矩阵中的行
java·算法
yangpipi-37 分钟前
《C++并发编程实战》 第4章 并发操作的同步
开发语言·c++
火钳游侠1 小时前
java单行注释,多行注释,文档注释
java·开发语言
有趣的我1 小时前
C++ 多态介绍
开发语言·c++