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