这篇文章就是验证一件事:

只有多核cpu的计算机执行多个线程时才会提高效率(并行),单核cpu执行多个线程不会提高效率(并发)。

我选择的任务是:冒泡排序长度30000的int数组

单线程下

我们先测试一下单线程下这个任务的平均用时,代码如下:

public class TestSingleTask {private static int[] arr1 = new int[30000];static {randomArr(arr1);}public static void main(String[] args) throws InterruptedException {long startTime = System.currentTimeMillis();/***************冒泡开始**************/int temp = 0;for(int i = 0 ;i< arr1.length -1; i++){for(int j = 0; j<arr1.length-1-i; j++){if(arr1[j]>arr1[j+1]){temp = arr1[j];arr1[j] = arr1[j+1];arr1[j+1] = temp;}}}/***************冒泡结束**************/long endTime = System.currentTimeMillis();System.out.println("总共耗时:" + (endTime - startTime));}// 生成随机数private static void randomArr(int[] arr){int len = arr.length;for (int i = 0; i < len; i++){arr[i] = (int)Math.round(Math.random() * len) + 1;}}
}

输出

多测测试后,大致需要花1600ms ~ 1800ms

多线程在多核cpu下

我们来看看多个任务(线程)在windows(多核)上并行的效果,代码如下

public class TestMultTaskInMutlCore {private static int[] arr1 = new int[30000];private static int[] arr2 = new int[30000];static {randomArr(arr1);randomArr(arr2);}public static void main(String[] args) throws InterruptedException {Runnable r1 = () -> sort(arr1);Runnable r2 = () -> sort(arr2);Thread t1 = new Thread(r1, "t1");Thread t2 = new Thread(r2, "t2");t1.start();t2.start();long startTime = System.currentTimeMillis();t1.join();// 确保t1执行完毕t2.join();// 确保t2执行完毕long endTime = System.currentTimeMillis();System.out.println("总共耗时:" + (endTime - startTime));}private static void sort(int[] arr){int temp = 0;for(int i = 0 ;i< arr.length -1; i++){for(int j = 0; j<arr.length-1-i; j++){if(arr[j]>arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}private static void randomArr(int[] arr){int len = arr.length;for (int i = 0; i < len; i++){arr[i] = (int)Math.round(Math.random() * len) + 1;}}
}

输出

多测测试后,大致需要花1950ms ~ 2100ms

如此看来,确实提高了效率,因为串行执行的话,需要花费3200ms ~ 3600ms

多线程在单核cpu下

为了在单核cpu环境下测试,使用虚拟机测试

打开虚拟机的设置

确保虚拟机的内核总数是1

打开虚拟机后,我们就可以把多线程在多核cpu下的测试代码编译后的class文件通过xftp传递到linux中,我放在了/root/文档/下,如图

在执行java TestMultTaskInMultCore命令前,可以执行cat /proc/cpuinfo确保你的虚拟机只有一个cpu内核

执行java TestMultTaskInMultCore,输出如下

多测测试后,大致需要花3600ms左右

可见,单核cpu确实不能通过多线程的方式提高代码运行效率,因为其本质上并没有并行,自然不能提高效率

测试单核cpu和多核cpu执行java多线程任务的效率相关推荐

  1. 多线程与单核cpu,多核cpu概念

    1.多线程在单核和多核CPU上的执行效率问题的讨论  a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢)  多个cpu的话就可以在两个cpu中同时执 ...

  2. 对多线程程序,单核cpu与多核cpu如何工作相关的探讨

    对多线程程序,单核cpu与多核cpu如何工作相关的探讨 我们程序员在编码的时候,涉及到技术方案时,往往会忽略掉代码对性能方面的影响,或者没有足够的敏感度来帮助自己判断自己的技术方案对系统性能造成的影响 ...

  3. 对于多线程程序,单核cpu与多核cpu是怎么工作的

    此文中的大部分资料来自于网络上,我只是觉得把有道理的整理一下,方便以后查阅. 1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个 ...

  4. 单核CPU与多核CPU工作原理

    单核CPU与多核CPU工作原理 今天要介绍一下单核CPU和单核(超时间轴)CPU以及多核CPU的工作原理 一.单核CPU 起源: CPU的起源是1971年英特尔公司推出,由此正式宣告计算机的诞生,可以 ...

  5. Java+高级篇+单核CPU vs 多核CPU

    单核CPU:其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务 一个Java应用程序java.exe,其实至少有三个线程 * main()主线程 * gc()垃圾回收线程 * 异常处 ...

  6. 单核CPU与多核CPU的区别,多线程的优点,什么是并行?并发?

    单核cpu:是一种假的多线程,因为在一段时间内只能执行一个线程的任务.但是由于cpu执行时间特别短,所以感觉不出来 多核cpu可以更好的发挥多线程的效率 一个java应用程序java.exe,其实至少 ...

  7. 单核CPU和多核CPU的理解

    单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.例如:虽然有多车道,但是收费站只有一个工作人员在收费,只有收了费才能通过,那么CPU就好比收费人员.如果某个人不想交钱 ...

  8. c语言如何多核运行程序,对于多线程程序,单核cpu和多核cpu如何工作?

    1. 单核和多核CPU上多线程执行效率的探讨 a1: 多线程实际上是在单个CPU中按顺序执行的,但是系统可以帮助您切换该执行,但是它不是很快的(相反,是缓慢的) 如果有多个cpus,则可以同时在两个c ...

  9. 多线程在单核cpu与多核cpu下如何工作

    1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢) 多个cpu的话就可以在两个cpu中同时执行了 ...

最新文章

  1. 栅格数据的像素值保存问题
  2. 安装mysql-8.0.13-winx64遇到的问题和亲测有效的安装方法
  3. Lazarus安装使用
  4. 在 CTreeCtrl 中枚举系统中的所有窗口!(II)
  5. Flash of Unstyled Content (FOUC)
  6. python之列表操作
  7. 从C语言到C++的进阶之面向对象、using与命名空间(篇四)
  8. Linux服务器上无法保存修改的文件
  9. Redis持久化-RDB
  10. handlerexceptionresolver ajax,Http请求的异常处理(草稿) (SEUG)
  11. 转结构体_小型四轮山地自行车的设计机械结构设计模具数控工艺夹具
  12. Cannot add task ‘wrapper‘ as a task with that name already exists.
  13. 20岁生日快乐c语言,C语言怎样编程生日快乐代码
  14. 优秀项目经理的五大核心能力
  15. jQuery动画高级用法(上)——详解animation中的.queue()函数 http://www.cnblogs.com/hh54188/archive/2011/04/09/1996469.
  16. 深入解析SQL Server 2008
  17. python中如何把xlsx、xls文件转换为txt文件?安排
  18. 最好的贵人,是努力的自己
  19. Inkscape如何将png图片转换为svg图片并且不失真
  20. oracle控制文件有坏块处理过程

热门文章

  1. 2022年全球及中国FIP-EMI垫片行业销售前景与运行规模研究报告
  2. modalpopup控件使用时的pannel设置问题
  3. networkx 判断两图是否同构 得到同构的节点映射
  4. Photoshop Elements 10 All-in-One For Dummies 免积分下载
  5. 微信运动_刷步思路+Python源码+云部署(持续更新)_一蓑烟雨任平生
  6. Qt编写安防视频监控系统53-串口配置
  7. php汽车租赁网站_ThinkPHP实战开发汽车租赁网站项目教程
  8. Python量化交易平台开发教程系列0-引言
  9. java做小游戏扫雷(附源码)
  10. android 通知图标大小,android – 通知栏显示大图标和小图标