Java多线程之线程池配置合理线程数

Wesley13
• 阅读 390

目录
代码查看公司服务器或阿里云是几核的
合理线程数配置之CPU密集型
合理线程数配置之IO密集型
1. 代码查看公司服务器或阿里云是几核的
要合理配置线程数首先要知道公司服务器或阿里云是几核的
代码查看服务器核数:

System.out.println(Runtime.getRuntime().availableProcessors());

比如我的CPU核数4核,执行结果:

Java多线程之线程池配置合理线程数
2. 合理线程数配置之CPU密集型
CPU密集的意思是该任务需要大量的运算,而没有阻塞,CPU一直全速运行。
CPU密集任务只有在真正的多核CPU上才可能得到加速(通过多线程),而在单核CPU上,无论你丌几个模拟的多线程该任务都不可能得到加速,因为CPU总的运算能力就那些。
CPU密集型任务配置尽可能少的线程数量:
一般公式:CPU核数+1个线程的线程池
3. 合理线程数配置之IO密集型
方法一:

由于IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程,如CPU核数*2
方法二:

IO密集型,即该任务需要大量的IO,即大量的阻塞。
在单线程上运IO蕊集型的任务会导致浪费大量的CPU运算能力浪费在等待。
所以在IO密集型任务中使用多线程可以大大的加速程序运行,即使在单核CPU上,这种加速主要就是利用了被浪费掉的阻塞时间。
IO密集型时,大部分线程都阻塞,故需要多配置线程数:
参考公式:CPU核数/(1-阻系数)
比如8核CPU:8/(1.0.9)=80个线程数
阻塞系数在0.8~0.9之间

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
2个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi /etc/profile2:按字母键i进入编辑模式,在最底部添加内容: JAVAHOME/opt/jdk1.8.0152 CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jar PATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、 请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。 创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现 接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿 吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
Stella981 Stella981
1年前
Linux下查看CPU型号,内存大小,硬盘空间的命令(详解)
1 查看CPU 1.1 查看CPU个数 \# cat /proc/cpuinfo | grep "physical id" | uniq | wc -l 2 \*\*uniq命令:删除重复行;wc –l命令:统计行数\*\* 1.2 查看CPU核数 \# cat /proc/cpuinfo | grep "cpu cores" | uniq c
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置 1、virsh edit centos7 找到“memory”和“vcpu”标签,将 <name>centos7</name> <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>
Easter79 Easter79
1年前
Twitter的分布式自增ID算法snowflake (Java版)
概述 == 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
1年前
Linux日常运维小结
**1\. 如何看当前Linux系统有几颗物理CPU和每颗CPU的核数?** 物理cpu个数:cat /proc/cpuinfo |grep -c 'physical id' CPU一共有多少核:grep -c processor /proc/cpuinfo 将CPU的总核数除以物理CPU的个数,得到每颗CPU的核数。 **2\. 查看系统负载有两个常用的命
Wesley13 Wesley13
1年前
Mysql 查看所有线程,被锁的表等
\## 查看所有MYSQl相关的线程 \> show full processlist; \## 杀死线程id为2的线程 \> kill 2 \## 查看服务器状态 \> show status like '%lock%'; \## 查看服务器配置参数 \> show variables li
Stella981 Stella981
1年前
Noark入门之线程模型
### 0x00单线程 多进程单线程与单进程多线程的目的都是想尽可能的利用CPU,减少CPU的空闲时间,特别是多核环境,今天咱不做深度解读,跳过... ### 0x01线程池+锁 最早的一部分游戏服务器是采用线程池的方式来处理玩家的业务请求,以达最大限度的利用多核优势来提高处理业务能力。 但线程池同时也带来了并发问题,为了解决同一玩家多个业务请求不被
Wesley13 Wesley13
1年前
Mysql优化操作学习纪录
SHOW STATUS; FLUSH STATUS; 查看当前连接数 SHOW STATUS LIKE 'Thread\_%'; Thread\_cached:被缓存的线程的个数 Thread\_running:处于激活状态的线程的个数 Thread\_connected:当前连接的线程的个数 Thread\_created:总共被创建