Я понимаю, что есть накладные расходы при настройке обработки параллельного Stream, и что обработка в одном потоке выполняется быстрее, если есть несколько элементов или обработка каждого элемента выполняется быстро.
Но существует ли аналогичный порог для trySplit(), точка, где разложение проблемы на более мелкие куски контрпродуктивно? Я думаю по аналогии с переключением сортировки слияния на сортировку вставки для самых маленьких кусков.
Если да, то пороговое значение зависит от относительной стоимости trySplit() и потребления предмета в течение tryAdvance()? Рассмотрим операцию разделения, которая намного сложнее, чем продвижение индекса массива — например, разделение лексически упорядоченной мультимножествой перестановки. Существует ли соглашение, позволяющее клиентам определить нижний предел для разделения при создании параллельного потока, в зависимости от сложности их потребителя? Эвристика Spliterator может использовать для оценки самого нижнего предела?
Или, в качестве альтернативы, всегда безопасно ли нижний предел a Spliterator равным 1, и пусть алгоритм обработки во времени позаботится о том, следует ли продолжать разделение или нет?