2016-04-06 8 views
3

Akka akışlarına başladım; Bir web servisinden veri okuyan ve ardından S3'te devam eden bir akış oluşturmaya çalışıyorum. Sink.fold yöntemini kullanarak (kalıcı elemanlar hakkında bilgi toplamak için) kalıcılık için bir Sink tanımladığımda, lavaboya gönderilen elemanların birbiri ardına işlenecek mi yoksa paralel mi olacağına mı merak ediyordum?Akka Streams'de Sink.fold() işlem serileştiriliyor mu?

Bu temel bir soru, ancak dokümanlar içinde kesin bir yanıt bulamadık.

cevap

4

Sink.fold, bir önceki öğeyle birleştirmek için önceki öğelerin sonucunu gerektirdiğinden, zorunlu olarak sıralı olmalıdır.

Aslında daha çok Sink.foldLeft. Eğer elemanlar olarak a, b var ve bunları f kullanarak kat Başka bir deyişle

, sen f(acc, b) işlemek edebilmek için acc = f(zero, a) gerekir. Yani, a için işlem yapılıncaya kadar b işlenemiyor. api doc kaynaktan

: onun bir önceki çıkış (veya belirli bir sıfır değerine) ve girdi olarak elemanının veren Her bir alınan öğe için belirli bir işlevi çağırır

bir lavabo. Girilen java.util.concurrent.CompletionStage, giriş akışı bittiğinde son işlev değerlendirmesinin değeri ile tamamlanacak veya akışta bir hata bildirilirse Arıza ile tamamlanacaktır.