2016-04-06 4 views
3

Я начинаю с потоков Акка; Я пытаюсь создать поток, который считывает данные из веб-службы, а затем сохраняет их в S3. Мне было интересно, если я определю Раковину, используя метод Sink.fold (чтобы собирать информацию о сохраняемых элементах) для сохранения, являются ли элементы, отправленные в раковину, обрабатываться один за другим или параллельно?В потоках Akka, Sink.fold() обрабатывается сериализован?

Это основной вопрос, но я не смог найти окончательный ответ в документах.

ответ

4

С Sink.fold требуется результат предыдущих элементов, чтобы объединить его со следующим, это обязательно последовательное.

Это скорее Sink.foldLeft, на самом деле.

Другими словами, если у вас есть a, b как элементы, и вы складываете их с помощью f, вам нужно acc = f(zero, a), чтобы иметь возможность обрабатывать f(acc, b). Таким образом, до тех пор, пока обработка a не будет выполнена, b не может быть обработан.

api doc С:

раковину, что будет вызывать данную функцию для каждого принятого элемента, придавая ему свой предыдущий вывод (или заданное нулевое значение), а элемент в качестве входных данных. Возвращенный java.util.concurrent.CompletionStage будет заполнен значением окончательной оценки функции, когда конец потока заканчивается или завершается сбой, если в потоке сигнализируется сбой.

Смежные вопросы