当前位置: 首页 > 编程日记 > 正文

根据CPU核数合理设置线程池大小

一般来说池中总线程数是核心池线程数量两倍,只要确保当核心池有线程停止时,核心池外能有线程进入核心池即可。

我们所需要关心的主要是核心池线程的数量该如何设置。

自定义线程池代码

package com.lc.concurrent;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;public class MyThreadPoolExecutor {//最大可用的CPU核数public static final int PROCESSORS=Runtime.getRuntime().availableProcessors();//线程最大的空闲存活时间,单位为秒public static final int KEEPALIVETIME=60;//任务缓存队列长度public static final int BLOCKINGQUEUE_LENGTH=500;public ThreadPoolExecutor createThreadPool(){return new ThreadPoolExecutor(PROCESSORS * 2,PROCESSORS * 4,KEEPALIVETIME,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(BLOCKINGQUEUE_LENGTH));}
} 

线程中的任务最终是交给CPU的线程去处理的,而CPU可同时处理线程数量大部分是CPU核数的两倍,运行环境中CPU

的核数我们可以通过Runtime.getRuntime().availableProcessors()这个方法而获取。理论上来说核心池线程数量应该为

Runtime.getRuntime().availableProcessors()*2,那么结果是否符合我们的预期呢,可以来测试一下(本次测试测试的

是I/O密集型任务,事实上大部分的任务都是I/O密集型的,即大部分任务消耗集中在的输入输出。而CPU密集型任务主

要消耗CPU资源进行计算,当任务为CPU密集型时,核心池线程数设置为CPU核数+1即可)

package com.lc.concurrent;import java.util.Arrays;
import java.util.Random;
import java.util.concurrent.ThreadPoolExecutor;public class CreateThreads {public synchronized static void main(String[] args) {System.out.println(MyThreadPoolExecutor.PROCESSORS);new CreateThreads().test();}public synchronized void test(){ThreadPoolExecutor threadPoolExecutor=new MyThreadPoolExecutor().createThreadPool();for (int i = 0; i <= 100; i++) {MyTask myTask = new MyTask(i);threadPoolExecutor.execute(myTask);}threadPoolExecutor.shutdown();}}class MyTask implements Runnable{private int i;public MyTask(int i){this.i=i;}@Overridepublic void run() {System.out.println("任务"+i+"开始执行"+System.currentTimeMillis());for (int i=0;i<32766;i++){Random random=new Random();int randNum=random.nextInt();int[] a={1,2,3,4,5,6,9,18,290,238,991,100,19,1932,randNum};Arrays.sort(a);Arrays.hashCode(a);Arrays.stream(a);}System.out.println("任务"+i+"结束执行"+System.currentTimeMillis());}
}

本机CPU核数为4,可同时处理8线程,测试结果如下:

   核心池线程数量     执行耗时(毫秒,多次测试结果以/间隔)4                   474/479/4718                   430/436/42112                  432/425/43816                  437/431/44920                  471/481/469

可以发现当线程数量小于CPU核数两倍时速度明显较慢,超过两倍后速度差不多,当核心池数量过多时,速度又会显著下降

由此可以看出,核心池线程数量大小应在CPU核数两倍以上且不宜过多。

所以说,将线程池的核心池线程数量配置为CPU核数的两倍是比较合适的。



转载于:https://www.cnblogs.com/coder-lichao/p/10931919.html

相关文章:

云答题微信小程序 实现 前端加后台管理

1.为什么要使用微信云开发 微信云开发自己是不需要域名&#xff08;备案的域名&#xff09;&#xff0c;服务器&#xff0c;搭建数据库等。 2.使用技术 微信小程序相关云接口java &#xff08;SpringBootMaven&#xff09;后台管理使用 VUE 3.实现微信小程序效果如下 微信小…

用Windows Media Player截图的方法

视频截图方法&#xff1a; 关闭“视频加速功能即可”。 以Windows Media Player 9.0为例&#xff0c;选择菜单“工具→选项”&#xff0c;找到“性能”选项卡中的“视频加速”一栏&#xff0c;然后拖动下方的拉杆将默认的“完成”改为“无”&#xff0c;按“确定”保存设置&…

基于OHCI的USB主机 —— 结束语

从去年11月份开始连载的《基于OHCI的USB主机》系列总算告一段落了&#xff0c;到UFI命令层为止&#xff0c;所有USB主机的底层处理就结束了&#xff0c;再上面就是磁盘读写、文件系统、文件读写和应用系统了。这些上层应用基本上是与USB主机没有什么关系的&#xff0c;我的这个…

mac os x 查看网络端口情况

查看端口是否打开 使用 netstat 命令 a. netstat -nat | grep <端口号> , 如命令 netstat -nat | grep 3306 b. netstat -nat |grep LISTEN 使用 lsof 命令 # yongfu-pro at yongfu-pro.local in ~ [22:39:32] $ lsof -n -P -i TCP -s TCP:LISTEN COMMAND PID USER FD …

POJ1149-PIGS

1&#xff0c;从各个顾客到汇点各有一条边&#xff0c;容量就是各个顾客能买的数量上限。 2&#xff0c;在某一轮中&#xff0c;从该顾客打开的所有猪圈都有一条边连向该顾客&#xff0c;容量都是∞。 3&#xff0c;最后一轮除外&#xff0c;从每一轮的i号猪圈都有一条边连向下…

Center OS 离线安装Mysql5.7

1.相关资料准备 1.离线安装包下载 或者百度网盘 链接&#xff1a;https://pan.baidu.com/s/1oVP3u8GSaavxoJqKnvZPKg 提取码&#xff1a;vw88 2.libao库文件下载 链接&#xff1a;https://pan.baidu.com/s/12hrQIEF3kk2h2HlWE41G7w 提取码&#xff1a;fvt8 2.开始安装 检…

offsetTop,clientX,clientTop,clientWidth,offsetWidth 坐标,一次弄明白

这几个属性都是IE火狐完全兼容的&#xff0c;不多说&#xff0c;看我测试结果便知&#xff1a; 【源码如下】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ht…

各小组对于自己产品的预期“软件下载/用户人数”

组号 预期下载/用户人数Team1 100Team2 1000Team3 30下载&#xff0c;20篇博客引用Team4 1000Team5 3000Team6 100Team7 600Team8 1000下载&#xff0c;50个搜索结果引用Team9 300Team10 500在产品发布之后&#xff0c;再比照这个期望值&…

DB2 9 使用拓荒(733 检讨)认证指南,第 2 部分: DB2 数据操作(6)

学习根柢根底观观点操作游标游标措置概述在本节中&#xff0c;您将更进一步看到若安在嵌入式 SQL 使用次第中运用游标。异常&#xff0c;根柢根底的步骤照旧是声明、翻开、获取、更新/删除&#xff08;可选&#xff09;和封闭。为了赞助看法游标的观观点&#xff0c;假定 DB2 构…

判断字符串有无汉字

判断字符串是否全为汉字 1 String str1 "java判断是否为汉字" 2 String str2 "全为汉字" 3 String reg "[\\u4e00-\\u9fa5]" 4 boolean result1 str1.matches(reg)//false 5 boolean result2 str2.matches(reg)//true 提取字符串中…

获取指定字符的宽度

https://www.cnblogs.com/gaodu2003/archive/2009/06/12/1502242.html 方法一&#xff1a;var CharX, CharY: Integer;with Canvas do begin Font.Name : 宋体; Size : 9; CharX : TextExtent(字符串).cx; //字符串宽度&#xff0c;单位为像素 CharY : TextExtent(字符…

选课微信小程序开发 java

1.使用技术 javaspringbootmysqlhibernate微信小程序 2.功能介绍 后台管理 学生管理课程管理类型管理选课管理操作中心管理员中心导入导出学生微信小程序端 学生端 查看课程选课查看选课课程表个人中心管理员 查看课程新增课程用户管理课程类型管理管理员中心 3.系统功能展示…

危险进程大集合咯!(吐血推荐)

一般电脑中都有20-33个进程在后台运行着。有的占用了太多的系统资源&#xff0c;造成机器运行缓慢。更为不幸的是&#xff0c;一些进程是间谍软件和***&#xff0c;如此你的隐私和机器的控制权会被***所掌控。 不安全风险进程A 180ax.exe 是注册为TROJ.ISTZONE.H的下载器。这个…

老王Python-进阶篇4-异常处理1.3(周末习题)

一 编写with操作类Fileinfo()&#xff0c;定义__enter__和__exit__方法。完成功能&#xff1a; 1.1 在__enter__方法里打开Fileinfo(filename)&#xff0c;并且返回filename对应的内容。如果文件不存在等情况&#xff0c;需要捕获异常。 1.2 在__enter__方法里记录文件打开的当…

Springboot 日志管理模块编写记录

/**配置类 **/Component Order(value1) public class MyApplicationRunner implements ApplicationRunner{ /*private static final Logger logger LoggerFactory.getLogger(MyApplicationRunner.class);Autowiredprivate MemoryService memoryService; Overridepublic void r…

IEs 4 Linux 新版支撑 IE 7

Toy Posted in AppsIEs 4 Linux 可以让在 Linux 上安插 IE 变成一件异常俭省和高兴的事。昨天发布的 IEs 4 Linux 2.1 beta2 版末尾支撑安插 IE 7 了。不过&#xff0c;需求使用 –beta-install-ie7 的下令行选项来激活。据作者称&#xff0c;在 Linux 安插的 IE 7&#xff0c;…

h3c 3600 acl 配置 滤源IP是网关的ARP报文的ACL规则

h3c 3600 acl 配置 滤源IP是网关的ARP报文的ACL规则 悬赏分&#xff1a;100 - 解决时间&#xff1a;2009-3-8 14:30 星号之间是我在网上查到的华为交换机的配置方法&#xff1a; ************************************************ 全局配置ACL禁止所有源IP是网关的ARP报文 acl…

useradd与adduser的区别

useradd与adduser都是创建新的用户 在CentOs下useradd与adduser是没有区别的都是在创建用户&#xff0c;在home下自动创建目录&#xff0c;没有设置密码&#xff0c;需要使用passwd命令修改密码。 注&#xff1a;有朋友在博客园上回复我说 centos adduser 不创建用户home目录…

入门linux

作者&#xff1a;opmetic 出自: http://www.linuxdiyf.com说到入门linux ,仍是在大二的时辰&#xff0c;由于插手了黉舍的一个比赛举动&#xff0c;是在linux下的一个顺序匹敌&#xff0c;以是在自己的机子上装了一个RedHat9。厥后风闻它没有更新版本了&#xff0c;接着黉舍检…

springboot之异步调用@Async

引言&#xff1a; 在Java应用中&#xff0c;绝大多数情况下都是通过同步的方式来实现交互处理的&#xff1b;但是在处理与第三方系统交互的时候&#xff0c;容易造成响应迟缓的情况&#xff0c;之前大部分都是使用多线程来完成此类任务&#xff0c;其实&#xff0c;在spring 3.…

js将字符串作为函数名调用函数

需求&#xff1a;获取JSON对象的函数名称&#xff0c;并执行该函数。 解决&#xff1a;用eval函数&#xff0c;字符串转换为命令行执行都可以通过eval函数。 计算 JavaScript 字符串&#xff0c;并把它作为脚本代码来执行。 function loadForm(itemCode){for(var i0;i<ITEM…

2010网络营销-电子商务厦门峰会即将开幕

曾几何时&#xff0c;安踏、361度等福建晋江企业通过在央视大规模投放广告使企业的知名度得到迅速提升&#xff0c;产品销量也节节攀升。如今&#xff0c;大批福建企业又把营销的战场转向了互联网&#xff0c;如何在互联网这个营销新战场续写辉煌成了众多福建企业当前最关心的问…

百度前端技术学院js任务三

任务地址&#xff1a;http://ife.baidu.com/course/detail/id/98 代码&#xff1a; 1 <!DOCTYPE>2 <html>3 <head>4 <meta charset"utf-8">5 <title>IFE JavaScript Task 01</title>6 </head>7 <body>8…

开源分布式Job系统,调度与业务分离-如何创建一个计划HttpJob任务

项目介绍&#xff1a; Hangfire&#xff1a;是一个开源的job调度系统,支持分布式JOB&#xff01;&#xff01; Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的。可以独立更新Hangfire版本不影响&#xff01; 该组件已被Hangfire官方采纳&#…

小手段:开启 GNOME 的窗口分组效果

Toy Posted in Tips用过 Windows XP 的伴侣除夜要都晓得它有一项分组雷同义务栏按钮的效果&#xff0c;该效果主动将同类窗口的义务按钮折叠为一个单独的按钮&#xff0c;从而无效处置义务栏的窗口拥堵后果。其实&#xff0c;在 Linux 的 GNOME 桌面情况中也有雷同的效果──窗…

MySQL设值自动修改时间

ALTER TABLE form_ylqx ADD update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 修改时间

[原]不祥的CPU——Alpha

这几天都在捣鼓 Sun Fire V890 小型机&#xff0c;小型机可不像PC服务器那样“不一样的品牌&#xff0c;一样的芯”&#xff0c;不同的品牌的小型机最大的不同当数CPU和OS了&#xff0c;IBM小型机CPU是Power而OS是AIX&#xff0c;HP小型机的CPU是Intel的Itanium而OS是HP-UX&…

Leetcode 764. Largest Plus Sign

思路&#xff1a;动态规划。对于第i行第j列的元素grid[i][j]表示的是这个元素的plus sign的等级&#xff0c;初始化不在mines中的元素对应的grid值为较大值&#xff08;只要大于N/2即可&#xff09;&#xff0c;在mines中的元素对应的grid值为0。不在mines中的元素&#xff0c;…

吴裕雄--天生自然 JAVASCRIPT开发学习:(String) 对象

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body><script> var carname1"Volvo XC60"; var carname2Volvo XC60; var answer1It\s al…

校园音乐点歌平台的设计与开发 微信小程序 点歌系统 java 开发

1、 微信小程序前台展示 2 、 使用到的技术框架 Springbootmavenmybatis网易云相关API 3、 后台展示 项目地址&#xff1a; 项目地址