【问题标题】:Parallel processing in Scala 2.9Scala 2.9 中的并行处理
【发布时间】:2013-06-26 14:25:46
【问题描述】:

假设我有一个大约 10K 元素的数组,我需要处理数组的所有元素。我想以仅并行处理 K 元素的方式处理它们。

我使用Scala 2.9。我尝试了并行集合(见下文),但我看到 更多 比并行处理的 K 元素。

导入 collection.parallel.ForkJoinTasks.defaultForkJoinPool._ val old = getParallelism 设置并行度(K) val result = myArray.par.map(...) // 并行处理数组 setParallelism(旧)

您建议如何处理Scala 2.9 中的数组,以使只有K 元素被并行处理?

【问题讨论】:

    标签: scala parallel-processing parallel-collections


    【解决方案1】:

    setParallelism 方法设置了并行集合的 fork/join 池应该使用的并行工作者的推荐数量。那些 K 工作人员可以在集合的任何部分工作 - 由调度程序决定将工作人员分配给哪些元素。

    如果您只想在并行操作中包含第一个 K 元素,您应该使用 take 方法,然后是 map

    myArray.par.take(K).map(...)
    

    您也可以在进行映射之前使用view.take(K).map(...).force 创建并行视图。

    【讨论】:

    • 谢谢。你能详细说明一下view的使用吗?
    • 视图背后的想法是推迟评估中间集合,否则这些中间集合将使用takemapfilter 在内存中创建,直到集合为forced。由于某些抽象惩罚和间接性,这可能会或可能不会提高性能,具体取决于转换是什么。你可以在这里阅读更多信息:docs.scala-lang.org/overviews/collections/views.html
    猜你喜欢
    • 2011-08-02
    • 2011-10-03
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2015-04-14
    • 2011-09-13
    相关资源
    最近更新 更多