Java 如何确定线程池大小及其IO密集型公式验证(未完)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

应该如何设置线程池大小

根据IBM提供的设置建议

The optimum size of a thread pool depends on the number of processors available and the nature of the tasks on the work queue. On an N-processor system for a work queue that will hold entirely compute-bound tasks, you will generally achieve maximum CPU utilization with a thread pool of N or N+1 threads.
For tasks that may wait for I/O to complete – for example, a task that reads an HTTP request from a socket – you will want to increase the pool size beyond the number of available processors, because not all threads will be working at all times. Using profiling, you can estimate the ratio of waiting time (WT) to service time (ST) for a typical request. If we call this ratio WT/ST, for an N-processor system, you’ll want to have approximately N(1+WT/ST)* threads to keep the processors fully utilized.

可以得出:
对于CPU密集型任务,设置大小为:

线程

线程池大小选择:针对 I/O 密集型场景和 CPU 密集型场景 总的来说,线程 I/O 时间比例越高,需要越多线程来 overlap 这个 I/O,反之需要越少的线程。同时需要认识到,并不是使用线程池就一定比单线程高效,单线程相比多线程避免了上下文切换时间和锁。因此也可以很高效。有了以上方法,我们就可以做到在不同业务场景中选择不同的线程池大小了。...... 阅读详情

相关推荐

线程池的线程数配置策略

例如,若IO等待时间占50%,则线程数 ≈ 逻辑核心数 × (1 + 0.5) = 12(8核为例)。避免过多的线程导致频繁的上下文切换(Context Switching),浪费CPU时间。线程数 = CPU逻辑核心数 × (1 + 平均IO等待时间 / CPU计算时间)额外+1是为了在某个线程因页错误(Page Fault)等阻塞时,仍能保持CPU满载。将任务拆分为CPU和IO两部分,分别使用不同的线程池(如。例如,4核8线程的CPU建议配置16个线程。,等长时间等待操作,CPU空闲。

Q_Boom的博客 687

如何设定线程池大小

CPU密集型,在CPU多核情况下,建议将线程池大小设置为2Ncpu + 1I O密集型,建议将线程池大小设置为((线程等待时间+线程CPU时间)/线程CPU时间 )* Ncpu参考链接:https://cloud.tencent.com/developer/article/1806245。

goat的博客 2021

线程池详解

1 线程池作用 降低资源消耗。通过重复利用已创建的线程,来降低线程创建、销毁线程造成资源的消耗。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控。 2 线程池的状态 RUNNING 可以接收新的任务,正常工作。可以通过shutdown() 转为 SHUTDOWN SHUTDOWN 不会接收新任务,但会执行已接收的队列中的任务。该状态下 如果队列中任务都执行完,数量为0 ,工作线程也为0则会转为 TDIYING 状

weixin_43960071的博客 800

(七)线程池大小如何确定

线程的使用目的是提高运行速度,提高运行的速度是要充分提用CPU和I/O 的利用率。 这就涉及到CPU密集型程序和I/O密集型程序的区别了。 CPU 密集型程序 CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。 比如说要计算1+2+3+…+ 1亿、计算圆周率后几十位、数据分析。 都是属于CPU密集型程序

HaC 的博客 3791

Java并发编程--20-线程池拒绝策略与参数调优:CPU密集型IO密集型的黄金公式

/ 生产级自定义线程池模板(核心参数全可控)// 1. 获取CPU核心数(基础依据)// 2. 核心参数配置// CPU密集型// IO密集型// 有界队列// 3. 自定义线程池new ArrayBlockingQueue<>(QUEUE_CAPACITY), // 有界队列new ThreadFactory() { // 自定义线程工厂(命名+优先级)@Override},

weisian的博客 5793

[线程池]CPU密集型IO密集型对 CPU内核之间的关系

​ 在开发过程中,经常要使用到线程池,然而在自定义线程池的过程中,核心线程数应该如何设置呢?一般网上的答案是,根据IO密集型和CPU密集型进行区别设置先不说实际运用中是否按照以上公式设置,我们先来看一下什么是IO密集型程序和CPU密集型程序。

长夜烛火的博客 1059

线程池的核心线程数 设置大小与cpu 的关系

1.线程池和CPU核心数的关系 一般说来,大家认为线程池大小经验值应该这样设置:(其中N为CPU processors的个数) (1)如果是CPU密集型应用,则线程池大小设置为N+1(或者是N),线程的应用场景:主要是复杂算法 (2)如果是IO密集型应用,则线程池大小设置为2N+1(或者是2N),线程的应用场景:主要是:数据库数据的交互,文件上传下载,网络数据传输等等 +1的原因是:即使当计算密集型的线程偶尔由于缺失故障或者其他原因而暂停时,这个额外的线程也能确保CPU的时钟周期不会被浪费。 补一下概

启迪思维,精进技术 1万+

如何正确设置线程池大小?从 CPU 密集IO 密集的全方位解析

本文深入探讨了线程池优化的核心问题——如何合理设置线程数量。通过超市收银员的生动类比,文章区分了CPU密集型IO密集型任务的特点:前者需要少量线程(CPU核心数+1)以避免上下文切换开销,后者可配置更多线程(CPU核心数×2-3)以填补IO等待时的CPU空闲。文中提供了任务类型的判断方法(代码分析、系统监控)和计算公式,并针对混合型任务建议采用异步拆分策略。最终给出了基于不同任务类型的线程数配置方案,强调CPU密集型要"少而精",IO密集型要"多并发"的优化原则。

Knight 1383

java线程池大小设置_如何合理地估算线程池大小

感谢网友【蒋小强】投稿。如何合理地估算线程池大小?这个问题虽然看起来很小,却并不那么容易回答。大家如果有更好的方法欢迎赐教,先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每个Transaction由一个线程完成,继续假设平均每个线程处理一个Transaction的时间为4s。那么问题转化为:如何...

weixin_42513928的博客 635

Java线程池大小的设置

一般说来,大家认为线程池大小经验值应该这样设置:(其中N为CPU的个数)如果是CPU密集型应用,则线程池大小设置为N+1如果是IO密集型应用,则线程池大小设置为2N+1如果一台服务器上只部署这一个应用并且只有这一个线程池,那么这种估算或许合理,具体还需自行测试验证。但是,IO优化中,这样的估算公式可能更适合:最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目因...

猪猪 4740

Java 确定线程池中工作线程数的大小

以问答形式展开,会更有针对性: 1、工作线程是不是越多越好?      不是。a、服务器cpu核数有限,所以同时并发或者并行的线程数是有限的,所以1核cpu设置1000个线程是没有意义的。  b、线程切换也是有开销的。频繁切换线程会使性能降低。 2、调用sleep()函数的时候,县城是否会占用着CPU?     不占用,sleep()函数切换时会把cpu让出来。accept()阻塞和rec...

学习学习再学习 1万+

线程池优化

线程池优化 如果从提高线程执行效率,来对多线程程序进行优化,自然让人联想到了线程池技术。 基本概念与原理 Java 线程池会生成一个队列,要执行的任务会被提交到这个队列中。有一定数量的线程会在队列中取任务,然后执行。 任务执行完毕以后,线程会返回任务队列,等待其他任务并执行。线程池中有一定数量的线程随时待命。 由于生成和维持这些线程是需要耗费资源了,维持太多或者太少的线程都会对系统运行效率造成影响...

大黄蜂的博客 2428

线程池大小设置,CPU的核心数、线程数的关系和区别,同步与堵塞完全是两码事

线程池应该设置多少线程合适,怎么样估算出来。最近接触到一些相关资料,现作如下总结。 最开始接触线程池的时候,没有想到就仅仅是设置一个线程池大小居然还有这么多的学问,汗颜啊。 首先,需要考虑到线程池所进行的工作的性质: IO密集型CPU密集型简单的分析来看,如果是CPU密集型的任务,我们应该设置数目较小的线程数,比如CPU数...

ccccccccc 6358

如何合理地估算线程池大小

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2019 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析...

weixin_44421461的博客 166

如何合理地估算线程池大小

如何合理地估算线程池大小? 这个问题虽然看起来很小,却并不那么容易回答。大家如果有更好的方法欢迎赐教,先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每个Transaction由一个线程完成,继续假设平均每个线程处理一个Transaction的时间为4s。那么问题转化为: 如何设计...

lixiaoxiong的专栏 237

线程池大小设置踩坑:2N公式在生产环境失效的完整分析

本文是。

qq_35107975的博客 637

Java 线程池 -03

怎么合理的设置线程池大小呢 感谢:http://ifeve.com/how-to-calculate-threadpool-size/ Java中任务分为CPU密集型IO密集型 第一种: 如果是CPU密集型应用,则线程池大小设置为N+1 如果是IO密集型应用,则线程池大小设置为2N+1 如果一台服务器上只部署这一个应用并且只有这一个线程池,那么这种估算或许合理,具体还需自行测试验证。 第二种...

qq_36291682的博客 2878
上一篇: 动态规划-找零钱问题
visitor_sam
博客等级 码龄8年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值