2014-01-27 51 views
8

平行集合操作如何與Akka Actor(和Futures)在系統上進行高效調度時使用的併發性/並行性相一致?與Akka混合平行集合

執行者和期貨執行由ExecutionContext處理,通常由Dispatcher提供。我在平行集合中找到的表示他們使用了一個TaskSupport對象。我發現一個ExecutionContextTaskSupport對象可能會連接這兩個,但我不確定。

什麼是混合兩種併發解決方案的正確方法,或者建議不要這樣做?

回答

3

目前這不支持/處理好。

在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,如上面的代碼示例所示。