假設我有一個線程綁定到一個CPU的java程序。從下圖左側 - 我們可以看到兩個CPU中的一個被刷新了。 (它已經佔據了這個位置一段時間)。CPU使用率如何達到50%,但不能有效使用一個CPU?
但是右邊的圖表顯示不同的CPU正在做不同的活動,而且一個沒有被阻止。
我的問題是:如何CPU使用率最高,在50%,但不能有效地使用一個CPU?
假設我有一個線程綁定到一個CPU的java程序。從下圖左側 - 我們可以看到兩個CPU中的一個被刷新了。 (它已經佔據了這個位置一段時間)。CPU使用率如何達到50%,但不能有效使用一個CPU?
但是右邊的圖表顯示不同的CPU正在做不同的活動,而且一個沒有被阻止。
我的問題是:如何CPU使用率最高,在50%,但不能有效地使用一個CPU?
即使您的進程只使用一個核心/ CPU,Windows也會嘗試將負載分配到所有可用的核心。這種情況發生得非常快/通常看起來好像沒有任何核心可以用於100%。
如果您告訴Windows只使用一個核心,您會看到這一個達到100%。您可以通過打開taskmgr
並右鍵單擊該過程並選擇affinity
或啓動應用程序時執行此操作。
我可以告訴你這是怎麼用7z
完成的,因爲使用哪個(單核)應用程序並不重要,效果是一樣的。
start /affinity 0x1 7z b -mmt1
確實啓動7z並使用/affinity 0x1
將第一個內核指定爲唯一內核。 (b -mmt1
用於將7-zip轉換爲只使用一個線程的基準測試模式) 如果您定期啓動進程,則可以從taskmgr中查看/更改關聯。
的CPU圖表將在這兩種情況下顯示出100%:
問題「如何有效地使用CPU」沒有直接的答案(有數百萬答案)。 –
這可能是超線程你的看到... MS適用每個核心執行2線程 – Jonathan
這是什麼CPU? – Malt