2017-01-02 89 views
0

假設我有一個線程綁定到一個CPU的java程序。從下圖左側 - 我們可以看到兩個CPU中的一個被刷新了。 (它已經佔據了這個位置一段時間)。CPU使用率如何達到50%,但不能有效使用一個CPU?

但是右邊的圖表顯示不同的CPU正在做不同的活動,而且一個沒有被阻止。

enter image description here

我的問題是:如何CPU使用率最高,在50%,但不能有效地使用一個CPU?

+0

問題「如何有效地使用CPU」沒有直接的答案(有數百萬答案)。 –

+2

這可能是超線程你的看到... MS適用每個核心執行2線程 – Jonathan

+0

這是什麼CPU? – Malt

回答

1

即使您的進程只使用一個核心/ CPU,Windows也會嘗試將負載分配到所有可用的核心。這種情況發生得非常快/通常看起來好像沒有任何核心可以用於100%。

如果您告訴Windows只使用一個核心,您會看到這一個達到100%。您可以通過打開taskmgr並右鍵單擊該過程並選擇affinity或啓動應用程序時執行此操作。

我可以告訴你這是怎麼用7z完成的,因爲使用哪個(單核)應用程序並不重要,效果是一樣的。

start /affinity 0x1 7z b -mmt1確實啓動7z並使用/affinity 0x1將第一個內核指定爲唯一內核。 (b -mmt1用於將7-zip轉換爲只使用一個線程的基準測試模式) 如果您定期啓動進程,則可以從taskmgr中查看/更改關聯。 affinity of a process

的CPU圖表將在這兩種情況下顯示出100%:

100% on a single core

以上所有截圖都是來自德國的Windows 10,這是它會是什麼樣子上的英文版Windows 7: enter image description here