多執行緒執行程式的目的一般是提高程式執行效率並且能夠提高硬體的利用率比如多核cpu,但是如果我們只有單核cpu併發執行程式會怎樣呢?
我以兩個環境作為對比:
環境a(我本機8c)
環境b(我的雲伺服器1c)
分別執行併發、序列需要cpu參與的**
這裡需要注意,如果我執行thread.sleep這種**,是無法達到效果的,因為sleep時會讓出cpu資源,cpu並沒有參與工作。
上**:
@overridecountdownlatch countdownlatch = new countdownlatch(1);
date begin = newdate();
new thread(() ->
).start();
new thread(() ->
).start();
while(true)
}date begin2 = newdate();
long a = 0;
a =onesectime();
a +=onesectime();
date end2 = newdate();
system.out.println("a:"+a+" time:"+(end2.gettime()-begin2.gettime()));
}private longonesectime()}}
returnf;
}
兩個環境之間的差異請忽略,cpu型號本身不同
環境a:
6431
a:20000000000 time:9747
環境b:
5033
a:20000000000 time:56
能夠看出來一點,多核環境下,多執行緒程式執行速度是較序列快的
但是單核環境下,多執行緒程式執行速度不快反而慢的多,cpu排程多執行緒上下文切換等消耗影響很嚴重。
這裡簡單記錄一下,以打消自己心中疑惑
併發測試集合點測試併發
併發測試集合點 定時器下的synchronizing timer number of simulated users to group by 集合多少人後再執行請求 timeout in milliseconds 指定人數 多少秒沒集合到算超時 設定延遲時間以毫秒為單位 注意 如果設定timeout...
併發與高併發(三) CPU多級快取 亂序執行優化
cpu多級快取中亂序執行優化究竟是怎麼優化的呢?為什麼會亂序呢?處理器或編譯器為提高運算速度而做出違背 原有順序的優化。as if serial語義 不管怎麼重排序 編譯器和處理器為了提高並行度 單執行緒 程式的執行結果不會改變。編譯器 runtime和處理器都必須遵守as if serial語義。...
單核cpu與多執行緒體會
1.多執行緒在單核和多核cpu上的執行效率問題的討論 多執行緒在單cpu中其實也是順序執行的,不過系統可以幫你切換那個執行而已,其實並沒有快 反而慢,涉及到切換執行緒的消耗 多個cpu的話就可以在兩個cpu中同時執行兩個執行緒.但為什麼有時候執行緒數超過cpu核心數會更快呢?原因是這種程式的單個執行...