Concurrent/parallel reduce¶
parallel¶
При обработки данных (напр. в stream) задает свойство возможности свертки исходного датасета по кусочкам и мерж их в один.
В stream API может быть использован как в reduce (возвращает НОВЫЙ склееный элемент), так и в collect (модифицирует один из переданных аргументов и возвращает его).
В пределах одного потока используется только один результирующий контейнер, и при завершении операций в данном потоке передается (merge/combiner) в другой поток для объединения результата.
parallel потоки не зависимы друг от друга.
concurrent¶
При обработки данных (напр. в stream) задает свойство возможности свертки исходного датасета в не уникальный для каждого воркера результирующий контейнер.
В stream API может быть использован в collect(Collector), с заданными свойствами CONCURRENT и UNORDERED (для независимости от порядка добавления).
Для нескольких потоков есть возможность складывания результата в один и тот же результирующий контейнер (через метод accumulator), и вызов создания контейнера (метод supplier) вызывается один раз (~ возможно и больше)
concurrent потоки работают с разделяемым ресурсом.