單核CPU併發與非併發測試

多線程運行程序的目的通常是提升程序運行效率而且可以提升硬件的利用率好比多核CPU,可是若是咱們只有單核CPU併發運行程序會怎樣呢?服務器

我以兩個環境做爲對比:多線程

環境A(我本機8c)併發

環境B(個人雲服務器1c)ide

分別運行併發、串行須要CPU參與的代碼spa

這裏須要注意,若是我運行Thread.sleep這種代碼,是沒法達到效果的,由於sleep時會讓出cpu資源,cpu並無參與工做。線程

上代碼:code

 
 
@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型號自己不一樣blog

環境A:資源

6431
a:20000000000 time:9747get

環境B:

5033
a:20000000000 time:56

可以看出來一點,多核環境下,多線程程序運行速度是較串行快的

可是單核環境下,多線程程序運行速度不快反而慢的多,CPU調度多線程上下文切換等消耗影響很嚴重。

這裏簡單記錄一下,以打消本身心中疑惑

相關文章
相關標籤/搜索