[英]Start parallel processing at the same time in Akka Streams
我正在嘗試使用 Akka Streams 做一個技巧,其中一批元素將同時得到處理。 我注意到,即使您創建了一個Balance
並為其提供了一個序列,一旦涉及到流程,它也會開始執行每個元素。
有沒有辦法對元素進行批處理或緩沖,直到它們達到某個閾值然后同時開始並行執行? 可以使用 Akka Streams 工具來完成,還是需要一些 java/scala 並發編碼?
你有一些選擇。
有一整套分組函數grouped(Int)
, groupWithin(Int, FiniteDuration)
等,您可以使用它們來創建發出的元素集合,直到某個閾值被填充和/或在 window 等時間內發出。一旦你有這批,你可以mapAsync
它,在那里你可以對 Future 使用一些細粒度的控制,例如你可以為每個元素創建Future
,將它們與Future.sequence
和 map 合並為並行操作的結果。
stream
.grouped(10)
.mapAsync(1) { collection =>
// create future processing all values in collection at once
}
如果一次處理多個批次沒有問題,則可以增加mapAsync
的並行度。 如果您不需要以任何方式組合分組值,那么具有更高並行度(或mapAsync
)的mapAsyncUnordered
可能足以滿足您的需求。
您必須記住,必須合理設置分組和 mapAsync 中的值,因為例如,如果您嘗試對 1M 元素進行分組,您可能會遇到 OOM 錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.