运行“..par.map(' 直接在大型列表中



假设我有一个有点大(数百万个项目左右)的字符串列表。运行这样的东西是个好主意吗:

val updatedList = myList.par.map(someAction).toList
或者最好在

运行...par.map(之前对列表进行分组,如下所示:

val numberOfCores = Runtime.getRuntime.availableProcessors
val updatedList = 
  myList.grouped(numberOfCores).toList.par.map(_.map(someAction)).toList.flatten

更新:鉴于someAction相当昂贵(与groupedtoList等相比)

直接运行par.map,因为它已经考虑了内核的数量。但是,不要保留List,因为这需要完整副本才能成为并行集合。请改用 Vector

正如建议的那样,避免使用列表和par,因为这需要将列表复制到可以轻松并行遍历的集合中。有关说明,请参阅并行集合概述。

如具体并行集合类部分所述,ParVector对于map操作的效率可能低于ParArray,因此,如果您真的关心性能,使用并行数组可能是有意义的。

但是,如果someAction足够昂贵,那么它的计算成本将隐藏toListpar中的顺序瓶颈。

相关内容

  • 没有找到相关文章

最新更新