2016-04-06 5 views
3

Ich beginne mit Akka Streams; Ich versuche, einen Stream zu erstellen, der Daten von einem Webdienst liest und sie dann in S3 fortsetzt. Ich frage mich, wenn ich einen Sink mit der Sink.fold-Methode (um Informationen über die persistenten Elemente zu erhalten) für die Persistenz definieren, werden die Elemente an die Senke gehen nacheinander oder parallel verarbeitet werden?In Akka Streams, wird Sink.fold() serialisiert?

Es ist eine grundlegende Frage, aber ich konnte keine definitive Antwort in den Dokumenten finden.

Antwort

4

Da Sink.fold das Ergebnis von den vorherigen Elementen benötigt, um es mit dem nächsten zu kombinieren, ist es notwendigerweise sequentiell.

Es ist eher eine Sink.foldLeft, eigentlich.

Mit anderen Worten, wenn Sie a, b als Elemente haben, und Sie falten sie f verwenden, müssen Sie acc = f(zero, a) der Lage sein, f(acc, b) zu verarbeiten. Also, bis die Verarbeitung für a fertig ist b kann nicht verarbeitet werden.

Vom api doc:

ein Waschbecken, die die vorgegebene Funktion für jedes empfangene Element aufrufen wird, es seine früheren Ausgang (oder den vorgegebenen Nullwert) und das Element als Eingabe zu geben. Die zurückgegebene java.util.concurrent.CompletionStage wird mit dem Wert der abschließenden Funktionsbewertung abgeschlossen, wenn der Eingabestream endet, oder mit Failure abgeschlossen, wenn im Stream ein Fehler gemeldet wird.