我一直在关注新的Scala 2.9并行系列,我希望放弃一大堆类似东西的狡猾的业余版本。特别是,我想用自己的东西替换默认实现基础的fork join pool(例如,通过actor分配网络任务评估的东西)。我的理解是,这只是应用Scala的“可堆叠修改”范例的问题,但是集合库非常令人生畏,我不确定哪些位需要修改!
一些具体问题:
ForkJoinTasks
中的代码与fork join pool 进行交互?FutureThreadPoolTasks
。如何构建使用此特征而不是ForkJoinTasks
的集合?AdaptiveWorkStealingTasks
中的相应样板类,并以某种方式实例化使用这个新特征的集合实例?(作为参考,上面提到的所有特征都在Tasks.scala中定义。)
特别欢迎代码示例!
答案 0 :(得分: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 :(得分:5)
Here是一个描述如何在Scala 2.10中切换TaskSupport
个对象的文档。