[英]How to make fan-out akka-streams processing concurrent
我正在嘗試使用Akka流來同時處理一系列依賴流。
像這樣:
val concurrency = 2
Source(
(1 to 5).toStream.map(i => {
println(s"1: Emitting $i")
i.toString
}))
.mapAsyncUnordered(concurrency)(s => getNextStream(s, 25))
.mapConcat(identity)
.mapAsyncUnordered(concurrency)(out => getNextStream(out.x, 50))
.mapConcat(identity)
.mapAsyncUnordered(concurrency)(out => getNextStream(out.x, 100))
.mapConcat(identity)
.map(x => println(s"4: Received $x after ${System.currentTimeMillis() - start}"))
.runWith(Sink.ignore)
我的問題是它似乎沒有同時運行。 更改concurrency
變量對2
無效。 我懷疑mapConcat
正在序列化處理過程,但不確定。
可以在這里找到問題的完整的可運行示例: https : //github.com/realrunner/akka-stream-example 。
目前,該代碼需要11秒鍾才能完成。 我可以使用原始Actor輕松將其削減,而無需適當處理背壓。 關於如何使其更加並發的任何想法?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.