Scala:如何加快小型列表上的并行同步处理?

时间:2015-04-16 10:09:47

标签: scala parallel-processing

我看到并行集合主要用于加速大型集合的处理,但如果这对小型列表有帮助则不予提及。

检查此示例:

List(1,2,3).map(loadHeavyFile(_))

List(1,2,3).par.map(loadHeavyFile(_)).toList

我想知道的是:

  • 一个比另一个快吗?
  • 如果列表只有3个元素,Scala会使用多个线程吗?
  • 一般来说,是否可以加快此代码的响应时间?

我知道我可以使用Future,然后Future.sequence并等待结果出现,但当loadHeavyFile是同步调用时,这似乎不自然。我不想指定例如超时。

注意:我想保留列表排序。

欢迎任何指导。

1 个答案:

答案 0 :(得分:0)

parallel collections Measuring Performance - How big should a collection be to go parallel?中注意一些有助于估计和判断集合的并行版本是否优于非并行版本的参数。

对于这么小的列表,创建并行版本的开销可能大于实际的顺序映射;但是在这个例子中,重点在于I / O性能,可能还有内存管理,如果涉及的文件很大并且上传到内存中。

为了提供更实际的答案,请考虑针对不同I / O负载对顺序和并行版本进行基准测试,以便大致估计哪个较重的I / O负载阈值使并行版本值得。 I / O因子使得估计OS和硬件依赖,并且可能证明很难概括。