如何为Scala 2.9并行集合替换fork连接池?

Sco*_*son 19 parallel-processing scala scala-2.9 parallel-collections

我一直在寻找新的Scala 2.9并行系列,我希望放弃一大堆类似东西的狡猾的业余版本.特别是,我想用自己的东西替换默认实现基础的fork join pool(例如,通过actor分配网络任务评估的东西).我的理解是,这只是应用Scala的"可堆叠修改"范式的问题,但是集合库非常令人生畏,我不确定哪些位需要修改!

一些具体问题:

  1. 标准并行实现通过代码中的fork连接池进行交互是否正确ForkJoinTasks
  2. 我看到有另一种特质,FutureThreadPoolTasks.我如何构建一个使用这个特性的集合而不是ForkJoinTasks
  3. 我是否可以编写另一个替代方法(也许是一个混合的相应样板类,AdaptiveWorkStealingTasks并以某种方式实例化使用这个新特征的集合实例?

(作为参考,上面提到的所有特征都在Tasks.scala中定义.)

特别是代码示例非常受欢迎!

oxb*_*kes 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
Run Code Online (Sandbox Code Playgroud)

但是,对于我来说,如何通过提供自己的实现来覆盖集合本身明确导入的行为并不是很明显TaskSupport.例如,在ParSeqLike第47行:

import tasksupport._
Run Code Online (Sandbox Code Playgroud)

事实上,我甚至会说这看起来并行性绝对不会过分(除非我非常错误,尽管我经常这样).

  • 谢谢你,@ oxbow_lakes.令人好奇的是,"FutureThreadPoolTask​​s"似乎是一个孤儿.@ axel22,你能指出我讨论过哪个(如果有的话)邮件列表吗? (2认同)

axe*_*l22 5

是一个描述如何TaskSupport在Scala 2.10中切换对象的文档.