scala - 如何替换 Scala 2.9 并行集合的 fork 连接池?

标签 scala parallel-processing scala-2.9 parallel-collections

我一直在研究新的 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/

    相关文章:

    c - MPI 中的雅可比松弛

    Scala 2.10 与 2.9 不兼容

    scala - Redis-Quartz 集成

    java - Intellij 构建 scala 模块显示 scalac :Error:scala/xml/MetaData 错误

    scala - 有没有办法覆盖 sbt-native-packager 中的 init 脚本模板?

    algorithm - 我怎样才能使这个矢量枚举代码更快?

    mongodb - Scala 中的 Monad 转换器用于理解处理选项并收集错误消息

    python - 如何使用Python并行化CPU密集型数据处理任务?

    scala - 我可以定义一个 bang 运算符方法,但我不能在 Scala 中调用它。为什么?

    scala - 在scala中减去两个数组的最快方法是什么