【线程池】-4(合理配置线程池你是如何考虑的)

【线程池】-4(合理配置线程池你是如何考虑的),第1张

线程池能够同时执行的最大线程数:maximumPoolSize

有大量的运算,CPU一直全速运算

CPU密集型任务配置尽可能少的线程数量:

CPU核数 + 1 个线程

IO密集型,即该任务需要大量的IO,即大量的阻塞。

在单线程上运行IO密集型的任务会导致大量的CPU运算能力浪费在等待中。

所以在IO密集型任务中使用多线程可以大大加速程序运行,即使是在单核CPU上,这种加速主要就是利用了被浪费的阻塞时间。

即十倍或二十倍于CPU核心数

orgspringframeworkschedulingconcurrentThreadPoolTaskExecutor 是spring提供的线程池类

拒绝策略:

AbortPolicy:用于被拒绝任务的处理程序,它将抛出RejectedExecutionException

CallerRunsPolicy:用于被拒绝任务的处理程序,它直接在execute方法的调用线程中运行被拒绝的任务。

DiscardOldestPolicy:用于被拒绝任务的处理程序,它放弃最旧的未处理请求,然后重试execute。

DiscardPolicy:用于被拒绝任务的处理程序,默认情况下它将丢弃被拒绝的任务。

执行过程:

如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。

如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。

如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maxPoolSize,建新的线程来处理被添加的任务。

如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maxPoolSize,那么通过handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程 maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。

当线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。

核心线程数设置参考:

CPU密集型:核心线程数 = CPU核数 + 1

IO密集型:核心线程数 = CPU核数 2

什么是CPU密集型?什么是IO密集型?

>

1、计算机的简介

计算机的中央处理器包含:运算器和控制器,统称为“中央处理器”,即为CP

存储器又分为:内存和外存;

cpu、存储器、输入设备、输出设备等接口均通过 "系统总线"连接在一起;总线粗略理解为“主板”;

2、cpu、io密集型介绍

I/O(读写密集型) :指的是系统的cpu效能 比磁盘读写效能要高很多,这时是cpu在等io(磁盘到内存)的读写,此时cpu使用率不高; 在服务器上进行网络通讯、网络传输、磁盘读写等均为IO *** 作,多为网络请求压力大、磁盘读写频繁的 *** 作;io密集型的可能需要对磁盘进行升级、提高磁盘的相应速度和传输效率或通过负载技术将文件读写分散到多台服务器中;如果网络请求负载较高,可通过负载均衡技术、水平扩展提高负载。

CPU(计算密集型)指的是系统的磁盘读写效率高于cpu效率,此时cpu效率可能达到100%,但是磁盘读写速度很快; 多用来做计算、逻辑判断等cpu *** 作。可考虑通过消息队列或其他降维算法,将计算分散到不同的计算节点

参考:>

是IO密集型还是CPU密集型应该是开发人员自己就清楚的,如果你的应用主要是利用cpu计算,也就是更多的是消耗cpu资源的话,那么就是cpu密集型,如果更多的是和IO相关的,比如接收一个前端请求--解析参数--查询数据库--返回给前端这样的,那么就是IO密集型的。

以上就是关于【线程池】-4(合理配置线程池你是如何考虑的)全部的内容,包括:【线程池】-4(合理配置线程池你是如何考虑的)、spring中的线程池、cpu、io密集型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9819373.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存