我一直在研究新的 Scala 2.9 并行集合,并希望放弃很多我粗鲁的业余版本的类似东西。特别是,我想用我自己的东西(例如,通过参与者在网络上分配任务评估的东西)替换默认实现基础的 fork 连接池。我的理解是,这只是应用 Scala 的“可堆叠修改”范式的问题,但集合库足够吓人,我不确定哪些位需要修改!
一些具体的问题:
ForkJoinTasks
中的代码与 fork 连接池交互是否正确? ? FutureThreadPoolTasks
.我将如何构建一个使用此特征而不是 ForkJoinTasks
的集合? AdaptiveWorkStealingTasks
并以某种方式实例化使用这个新特性的集合实例?(作为引用,上面提到的所有特征都在 Tasks.scala 中定义。)
特别是代码示例非常受欢迎!
最佳答案
只是为了提供更多关于事物如何组合在一起的信息(我怀疑你已经知道了):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._
事实上,我什至会说看起来并行度肯定是 不可覆盖 (除非我非常错误,虽然我经常是)。
关于scala - 如何替换 Scala 2.9 并行集合的 fork 连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6039380/