簡體   English   中英

在 Akka Streams 中同時開始並行處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM