Параллельная обработка JVM с потоками или пулом потоков на самом деле не работаетJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Параллельная обработка JVM с потоками или пулом потоков на самом деле не работает

Сообщение Anonymous »

Итак, мы тестируем параллельные потоки, и пока они вообще не дают никакого прироста производительности на 8-ядерной машине.

Код: Выделить всё

Optional ret = Arrays.stream( a ).parallel()
.mapToObj( source -> { some very heavy number crunching } )
.min( Comparator.comparing( s -> s.valueDelta ) );
Массив a имеет длину 4 и содержит числа 0...3.
Я могу «.peek()» и распечатать поток и увидите, что он использует 4 потока.
Время выполнения немного медленнее, чем замена потока последовательным циклом for, итерирующим по a.
Обработка чисел не имеет никаких операций ввода-вывода, взаимодействия, синхронизации и доступа. только структура данных только для чтения чтобы определить наилучшее значение «обмена».
Просто в качестве эксперимента я заменил обработку чисел на сон (2000), и все это завершилось через 2039 мс, так что, похоже, оно работает параллельно. Но обработка чисел совсем не ускоряется.
Если посмотреть с помощью проводника процессов и монитора ресурсов в Windows, кажется, что он использует только одно ядро.
Поэтому я попробовал запустить его на Linux и не получил лучших результатов.
По какой-то причине jvm неправильно использует доступные ядра при своей многопоточности.
Мы можем воспроизвести это на нескольких машинах, в Windows и Linux. и никто никогда получил какое-либо ускорение.
В качестве альтернативы я также реализовал его, используя фиксированный пул потоков размером 4, и снова, никакого ускорения, пока показаны 4 потока (я печатаю изнутри шаг для отладки, чтобы увидеть, есть ли у меня другой поток для параллельной печати).
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/792 ... eally-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»