[英]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庫正確處理。
當我們接近處理所有項目時,並行集合將殺死一些線程。 所以最后幾個項目可能由單個線程處理。 有關此行為的更多詳細信息,請參閱我的問題。 使用ThreadPoolTaskSupport作為scala中並行集合的tasksupport
Future沒有這樣的東西,所有的線程都在使用,直到處理完所有對象。 因此,除非您的任務太小,以至於您不關心最后幾個任務的並行性丟失,並且您正在使用大量線程,這些線程必須盡快被殺死,Futures會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.