2011-05-18 66 views
19

我一直在尋找新的斯卡拉2.9平行集合,並希望放棄一大堆類似的事情我的crufty業餘版本。特別是,我想用我自己的東西(例如,通過網絡分發評估任務的東西)替換默認實現之下的分支連接池。我的理解是,這只是一個應用Scala的「可堆疊修改」範例的問題,但集合庫足夠嚇人,我不確定哪些位需要修改!如何替換Scala 2.9並行集合的分支連接池?

一些具體問題:

  1. 它是正確的,標準的並行實現與叉交互通過ForkJoinTasks代碼加入池
  2. 我看到有一個替代特質,FutureThreadPoolTasks。我將如何構建一個使用此特徵而不是ForkJoinTasks的集合?
  3. 我可以只寫另一個替代(也許是混合在AdaptiveWorkStealingTasks並以某種方式實例化使用這一新特性集合實例相應的樣板課嗎?

(僅供參考,所有上述特徵的定義在Tasks.scala

特別的代碼示例都非常歡迎

回答

5

Here是一個文檔,描述如何在Scala 2.10中切換TaskSupport對象。

16

只是提供的東西是如何結合在一起(我懷疑你已經知道)一些更多的信息:對的fork-join池「插入」通過parallel包對象的tasksupport值,它實現scala.collection.parallel.TaskSupport特徵。

這反過來,從Tasks繼承(你提到)和這樣的操作定義爲:

def execute[R, Tp](fjtask: Task[R, Tp]):() => R 

def executeAndWaitResult[R, Tp](task: Task[R, Tp]): R 

但是,它不會立即明顯,我怎麼可以覆蓋的行爲,明確進口由收藏本身提供您自己的TaskSupport實施。例如,在ParSeqLike 47行:

import tasksupport._ 

事實上,我會走這麼遠的話說,它看起來像並行是明確不可重寫(除非我很錯了,雖然我經常是)。

+1

已確認 - 在2.9.0版本中,它不能被覆蓋,儘管正在考慮如何在未來的發行版中允許這樣做。 – axel22 2011-05-18 11:21:05

+2

感謝此,@oxbow_lakes。 「FutureThreadPoolTask​​s」似乎是一個孤兒,這很好奇。 @ axel22,你能指出我討論過哪些(如果有的話)郵件列表嗎? – 2011-05-18 15:57:23

+0

如何使用反射更改此值? – ziggystar 2011-08-11 12:29:42