單核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調度多線程上下文切換等消耗影響很嚴重。

這里簡單記錄一下,以打消自己心中疑惑

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM