单核CPU并发与非并发测试
多线程运行程序的目的一般是提高程序运行效率并且能够提高硬件的利用率比如多核CPU,但是如果我们只有单核CPU并发运行程序会怎样呢?
我以两个环境作为对比:
环境A(我本机8c)
环境B(我的云服务器1c)
分别运行并发、串行需要CPU参与的代码
这里需要注意,如果我运行Thread.sleep这种代码,是无法达到效果的,因为sleep时会让出cpu资源,cpu并没有参与工作。
上代码:
@Override public void run(ApplicationArguments args) throws Exception { CountDownLatch countDownLatch = new CountDownLatch(1); Date begin = new Date(); new Thread(() -> { oneSecTime(); countDownLatch.countDown(); } ).start(); new Thread(() -> { oneSecTime(); countDownLatch.countDown(); } ).start(); while(true){ if(countDownLatch.getCount() == 0){ Date end = new Date(); System.out.println(end.getTime()-begin.getTime()); break; } } Date begin2 = new Date(); long a = 0; a = oneSecTime(); a += oneSecTime(); Date end2 = new Date(); System.out.println("a:"+a+" time:"+(end2.getTime()-begin2.getTime())); } private long oneSecTime(){ long f = 0; for (int i = 0; i < 10000; i++) { for (int j = 0; j < 100000; j++) { for (int k = 0; k < 10; k++) { f++; } } } return f; }
两个环境之间的差异请忽略,CPU型号本身不同
环境A:
6431
a:20000000000 time:9747
环境B:
5033
a:20000000000 time:56
能够看出来一点,多核环境下,多线程程序运行速度是较串行快的
但是单核环境下,多线程程序运行速度不快反而慢的多,CPU调度多线程上下文切换等消耗影响很严重。
这里简单记录一下,以打消自己心中疑惑
原文地址:https://www.cnblogs.com/zxporz/p/10818761.html
相关推荐
-
Android8.0适配——targetSdkVersion 23升级26遇到的坑 Java基础
2019-8-21
-
Mysql基础 Java基础
2019-7-25
-
Realm Java的学习、应用、总结 Java基础
2020-5-30
-
可重入锁和不可重入锁,递归锁和非递归锁 Java基础
2019-1-20
-
springmvc/springboot 全局异常处理和自定义异常 Java基础
2019-9-15
-
都0202年了,你还不知道javascript有几种继承方式? Java基础
2020-6-13
-
化腐朽为神奇:简明日志规范 Java基础
2019-8-20
-
javascript 几种常用继承方法和优缺点分析 Java基础
2020-7-3
-
Serializable详解(1):代码验证Java序列化与反序列化 Java基础
2020-6-14
-
TokuDB · 引擎特性 · HybridDB for MySQL高压缩引擎TokuDB 揭秘 Java基础
2019-9-1