#java #multithreading
#java #многопоточность
Вопрос:
У меня есть относительно простая программа, которая в настоящее время использует 1 поток (основной). Выполнение приложения занимает около 30 минут. Однако, согласно диспетчеру задач, он использует только 25% вычислительной мощности. Кажется, что он распространяется на 4 ядра моего процессора.
Есть ли способ «заставить» JVM использовать больше ресурсов?
Также требуется много чтения и записи в файл. Может ли это быть бутылочным горлышком и, следовательно, причиной того, что используется только 25% ресурсов обработки?
Спасибо
Ответ №1:
Если у вас только один поток и четыре ядра, то по определению вы можете использовать только 25% от общей вычислительной мощности. Не имеет большого значения, переходит ли этот поток между процессорами.
Если вы хотите, чтобы JVM использовала больше ресурсов, вам нужно распараллелить операцию. Мы не сможем вам помочь в этом без дополнительной информации о задаче.
Что касается чтения и записи файлов — это не будет узким местом процессора, но может оказаться узким местом в других областях.
Комментарии:
1. 1: Если у вас процесс, связанный с процессором, не думайте, что чем больше потоков, тем лучше. Минимальное количество потоков, необходимое для использования всех 4 ядер, равно 4 потокам.
Ответ №2:
Один поток может выполняться только на одном ядре одновременно (хотя он может «переключаться» с одного ядра на другое во время выполнения, поэтому вы видите, что он «распределен» по нескольким ядрам). Чтобы использовать все четыре ядра, вам потребуется (как минимум) 4 отдельных потока, которые могут выполняться одновременно.