簡體   English   中英

在scala中使用Futures而不是並行集合有什么好處?

[英]What is the benefit of using Futures over parallel collections in scala?

在並行處理項目列表時,是否有充分的理由增加Futures(vs並行集合)的復雜性?

List(...).par.foreach(x=>longRunningAction(x))  

VS

Future.traverse(List(...)) (x=>Future(longRunningAction(x)))

我認為主要優點是你可以在計算后立即訪問每個未來的結果,而你必須等待整個計算用並行集合完成。 缺點可能是你最終創造了很多未來。 如果你后來最終調用Future.sequence,那真的沒有優勢。

只要您想要組合延遲/並發計算,期貨就會變得有用。 期貨(好的,無論如何,如Akka的)是monadic,因此允許您構建任意復雜的計算結構,所有並發和同步由Futures庫正確處理。

當我們接近處理所有項目時,並行集合將殺死一些線程。 所以最后幾個項目可能由單個線程處理。 有關此行為的更多詳細信息,請參閱我的問題。 使用ThreadPoolTask​​Support作為scala中並行集合的tasksupport

Future沒有這樣的東西,所有的線程都在使用,直到處理完所有對象。 因此,除非您的任務太小,以至於您不關心最后幾個任務的並行性丟失,並且您正在使用大量線程,這些線程必須盡快被殺死,Futures會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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