我看到并行集合主要用于加速大型集合的处理,但如果这对小型列表有帮助则不予提及。
检查此示例:
List(1,2,3).map(loadHeavyFile(_))
List(1,2,3).par.map(loadHeavyFile(_)).toList
我想知道的是:
我知道我可以使用Future,然后Future.sequence
并等待结果出现,但当loadHeavyFile
是同步调用时,这似乎不自然。我不想指定例如超时。
注意:我想保留列表排序。
欢迎任何指导。
答案 0 :(得分:0)
在parallel collections Measuring Performance - How big should a collection be to go parallel?中注意一些有助于估计和判断集合的并行版本是否优于非并行版本的参数。
对于这么小的列表,创建并行版本的开销可能大于实际的顺序映射;但是在这个例子中,重点在于I / O性能,可能还有内存管理,如果涉及的文件很大并且上传到内存中。
为了提供更实际的答案,请考虑针对不同I / O负载对顺序和并行版本进行基准测试,以便大致估计哪个较重的I / O负载阈值使并行版本值得。 I / O因子使得估计OS和硬件依赖,并且可能证明很难概括。