Является ли обработка в Sink.fold() сериализованной в Akka Streams?
Я начинаю с потоков Akka; Я пытаюсь создать поток, который читает данные из веб-службы, а затем сохраняет их в S3. Мне было интересно, если я определю Sink, используя метод Sink.fold (для сбора информации о постоянных элементах) для сохранения, будут ли элементы, отправленные в приемник, обрабатываться один за другим или параллельно?
Это основной вопрос, но я не смог найти окончательного ответа в документации.
1 ответ
Поскольку Sink.fold
нужен результат из предыдущих элементов, чтобы объединить его со следующим, он обязательно последовательный.
Это больше Sink.foldLeft
, на самом деле.
Другими словами, если у вас есть a, b
как элементы, и вы сложите их, используя f
, тебе нужно acc = f(zero, a)
уметь обрабатывать f(acc, b)
, Итак, до обработки для a
готово b
не может быть обработано.
Из Api Doc:
Sink, который будет вызывать данную функцию для каждого полученного элемента, предоставляя ему свой предыдущий вывод (или заданное нулевое значение) и элемент в качестве ввода. Возвращенный java.util.concurrent.CompletionStage будет завершен со значением окончательной оценки функции, когда входной поток завершится, или завершится с Failure, если в потоке будет сигнализирован сбой.