2017-01-02 9 views
0

Предположим, у меня есть программа java, связанная потоком с одним процессором. Из левой части графика ниже - мы можем видеть, что один из двух CPU максимизирован. (Некоторое время он занимал эту должность).Каким образом использование ЦП максимум на 50%, но не эффективно использовать один процессор?

Но график справа показывает, что разные процессоры выполняют разные действия, а один не блокируется.

enter image description here

Мой вопрос: Как использование процессора максимум на 50%, но не эффективно использовать один процессор?

+0

Вопрос «Как эффективно использовать CPU nof» не имеет прямого ответа (есть ответы на миллионы). –

+2

это, скорее всего, гиперпоточность вашего видения ... где MS применяет 2 потока выполнения на ядро ​​ – Jonathan

+0

Какой процессор это? – 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