Я написал однопоточную программу с большим объемом вычислений, но когда я ее выполнил, я был удивлен, увидев, что мой четырехъядерный процессор загружен на 95%. Я ожидал увидеть что-то около 25% загрузки (одно ядро). Я использовал Process Explorer от sysinternals и был еще больше удивлен, увидев, что процесс Java имеет шесть потоков с почти идентичным распределением нагрузки, составляющим около 16% от общего времени процессора.
Изначально я планировал распараллелить свой код, но теперь кажется, что я не выиграю в производительности, так как процессор уже загружен на 95% даже с моим непараллельным кодом.
Кажется, что Java каким-то образом автоматически распараллеливает мой код, но все в сети говорит мне, что это не может быть правдой. Кто-нибудь знает, что происходит?
Изменить: я добавил несколько скриншотов, чтобы, надеюсь, ответить на некоторые вопросы ниже:
Система в простое — нагрузка 1 %. Я использую четырехъядерный процессор с 8 логическими ядрами.
Моя непараллельная программа Java запущена. Обратите внимание, что все 4 ядра почти исчерпаны:
Просмотр моей непараллельной Java-программы из SysInternals Process Explorer. Обратите внимание на 8 потоков с почти одинаковой нагрузкой: