平行集合操作如何與Akka Actor(和Futures)在系統上進行高效調度時使用的併發性/並行性相一致?與Akka混合平行集合
執行者和期貨執行由ExecutionContext
處理,通常由Dispatcher
提供。我在平行集合中找到的表示他們使用了一個TaskSupport
對象。我發現一個ExecutionContextTaskSupport
對象可能會連接這兩個,但我不確定。
什麼是混合兩種併發解決方案的正確方法,或者建議不要這樣做?
平行集合操作如何與Akka Actor(和Futures)在系統上進行高效調度時使用的併發性/並行性相一致?與Akka混合平行集合
執行者和期貨執行由ExecutionContext
處理,通常由Dispatcher
提供。我在平行集合中找到的表示他們使用了一個TaskSupport
對象。我發現一個ExecutionContextTaskSupport
對象可能會連接這兩個,但我不確定。
什麼是混合兩種併發解決方案的正確方法,或者建議不要這樣做?
目前這不支持/處理好。
在Scala 2.11-M7之前,試圖使用調度器作爲ContextExecutor會引發異常。
也就是說,在下面的代碼演員的接收將拋出一個NotImplementedError
:
val par = List(1,2,3).par
par.tasksupport = new ExecutionContextTaskSupport(context.dispatcher)
par foreach println
順便說一句,這已被固定在2.11-M7,但它沒有這樣做。要糾正上述問題。
在閱讀修復筆記時,聽起來像上面案例中由ExecutionContextTaskSupport
提供的實現可能會比直接使用其他TaskSupport實現之一有一些開銷;然而,我沒有做任何事來測試這種解釋或評估任何影響的程度。
的注並行類別:
默認情況下並行收集將使用全球ExecutorContext(ExecutionContext.Implicits.global
)就像你可能會使用期貨。雖然這種行爲很好,但如果您希望受調度員約束(使用context.dispatcher
) - 您可能會在Akka中使用期貨 - 您需要設置不同的TaskSupport
,如上面的代碼示例所示。