当前位置: 首页 > news >正文

The Number Of ThreadPoolExecutor

序言

整理下Java 线程池中线程数量如何设置的依据

巨人肩膀:

  1. https://blog.csdn.net/weilaizhixing007/article/details/125955693

  1. https://blog.csdn.net/yuyan_jia/article/details/120298564#:~:text=%E4%B8%80%E4%B8%AA%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%A4%84%E7%90%86%E8%AE%A1,N%3D16%E4%B8%AA%E7%BA%BF%E7%A8%8B%E3%80%82

Begin

基于如上的描述可以了解到,设置线程池的数量需要根据业务操作类型进行分类,不同类型的线程池的线程数量设置规则是有差距的,侧面也说明不同业务的线程池应该分别创建,而不是一个线程池应用到所有类型的计算任务上cuiyaonan2000@163.com

所以线程池分类:

  • 计算密集型

  • I/O密集经

  • 计算&I/O混合型

计算密集型

CUP的最优数量是: 内核数+1

这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1,比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其它原因导致的任务暂停而带来的影响。一旦任务暂停,CPU 就会处于空闲状态,而在这种情况下多出来的一个线程就可以充分利用 CPU 的空闲时间。---多一个线程的目的是为了解决线程突然中断,CPU没有被充分利用

当线程数量太小,同一时间大量请求将被阻塞在线程队列中排队等待执行线程,此时 CPU 没有得到充分利用;当线程数量太大,被创建的执行线程同时在争取 CPU 资源,又会导致大量的上下文切换,从而增加线程的执行时间,影响了整体执行效率。

I/O密集型

CPU最优数量是:

如上的算法是知道cpu利用率的情况下的算法,如下的算法是在不知道的情况下默认设置的一个算法

系统会用大部分的时间来处理 I/O 交互,而线程在处理 I/O 的时间段内不会占用 CPU 来处理,这时就可以将 CPU 交出给其它线程使用。因此在 I/O 密集型任务的应用中,我们可以多配置一些线程,具体的计算方法是 2N。

混合型

在一个任务既有I/O密集型又有计算密集型的计算任务时,且不能分开,则线程池的参数设置.

计算操作需要5ms,DB操作需要100ms,对于一台8个CPU的服务器,怎么设置线程数呢

最优线程数 = N(CPU 核数)*(1/(1+WT(线程等待时间)/ST(线程时间运行时间)))

如上 wt/st就是 5/105 表示,处理此类类型的业务单个线程的CPU利用率.

1 /(1+WT(线程等待时间)/ST(线程时间运行时间)) : 表示 1个内核如果要在105ms中全都运行起来则需要多个线程

N(CPU 核数)*(1/(1+WT(线程等待时间)/ST(线程时间运行时间))) 最后乘以N则标识充分利用N个内核的CUP时间需要的线程数

http://www.lryc.cn/news/5041.html

相关文章:

  • Linux(Linux各目录结构详解)
  • UART通讯简介
  • 80 90后表示真干不过,部门新来的00后已经把我卷奔溃了,不想干了····
  • Python中2.x 与 3​​.x 版本区别?
  • 性能指南笔记一
  • es数据导入导出
  • Python3入门教程||Python3 字符串||Python3 列表
  • API 的安全性
  • Linux驱动->设备树
  • 一天一道力扣题
  • 算法leetcode|36. 有效的数独(rust重拳出击)
  • 都说爱有回音,这次情人节驱动人生宠你!
  • npm安装依赖报错 npm code ERESOLVEnpm ERESOLVE unable to resolve dependency tree
  • 【项目设计】—— 基于Boost库的搜索引擎
  • 全网详解MyBatis-Plus updateById方法更新不了空字符串或null的解决方法
  • 联想K14电脑开机全屏变成绿色无法使用怎么U盘重装系统?
  • Spring Boot HTTP 400排查
  • 【手撕源码】vue2.x中keep-alive源码解析
  • ROS2机器人编程简述humble-第四章-BASIC DETECTOR .3
  • 【图像分类】基于PyTorch搭建LSTM实现MNIST手写数字体识别(双向LSTM,附完整代码和数据集)
  • 【Linux】多线程编程 - 同步/条件变量/信号量
  • ES优化方案
  • 从数据备份保护到完整生命周期管理平台,爱数全新发布 AnyBackup Family 8
  • Go 微服务开发框架 DMicro 的设计思路
  • 浅谈功能测试
  • UDP的详细解析
  • 史上最详细JUC教程之Synchronized与锁升级详解
  • Vue|初识Vue
  • 在职阿里6年,一个29岁女软件测试工程师的心声
  • (C语言)自定义类型,枚举与联合