Обычно требуется, чтобы количество вычислительных потоков соответствовало количеству аппаратных потоков.
Это поведение по умолчанию ForkJoinPool
, настраиваемое с помощью другого конструктора или, дляобщий пул, системное свойство java.util.concurrent.ForkJoinPool.common.parallelism
.Возможно, вы захотите уменьшить его, если в системе происходит другая интенсивная вычислительная работа.Похоже, что Stream API не определяет поведение (я могу ошибаться), но разумные реализации будут использовать текущий ForkJoinPool
(т. Е. Пул текущей задачи или общий пул, если он выполняется вне какого-либо пула)..
Как всегда, параллелизм может снизить скорость вашей программы, а также увеличить ее скорость.
Планирование потоков выполняется на платформе, обычно делегируемой операционной системе.Некоторые реализации JRE в прошлом перемещали потоки Java между потоками ОС, но это касается обработки блокировки ввода / вывода.