gpt4 book ai didi

scala - scala 并行收集处理的性能

转载 作者:行者123 更新时间:2023-12-04 16:43:52 24 4
gpt4 key购买 nike

我有需要一次处理数千条记录的场景。有时,可能有数百条记录,也可能多达 30000 条记录。我正在考虑使用 Scala 的并行集合。所以只是为了理解差异,我写了一个简单的 pgm,如下所示:

object Test extends App{
val list = (1 to 100000).toList
Util.seqMap(list)
Util.parMap(list)
}

object Util{
def seqMap(list:List[Int]) = {
val start = System.currentTimeMillis
list.map(x => x + 1).toList.sum
val end = System.currentTimeMillis
println("time taken =" + (end - start))
end - start
}
def parMap(list:List[Int]) = {
val start = System.currentTimeMillis
list.par.map(x => x + 1).toList.sum
val end = System.currentTimeMillis
println("time taken=" + (end - start))
end - start
}
}

我预计并行运行会更快。但是,我得到的输出是
time taken =32
time taken=127

机器配置 :
Intel i7 processor with 8 cores
16GB RAM
64bit Windows 8

我究竟做错了什么?这不是并行映射的正确场景吗?

最佳答案

问题是您正在执行的操作非常快(只需添加两个整数),以至于进行并行化的开销大于 yield 。只有在操作速度较慢时,并行化才真正有意义。

可以这样想:如果你有 8 个 friend ,你在一张纸上给每个人一个整数,并告诉他们加一个,把结果写下来,然后还给你,你会在给他们之前记录下来下一个整数,您将花费大量时间来回传递消息,以至于您可以自己更快地完成所有添加。

另外:从不做 .par在 List 上,因为并行化过程必须将整个列表复制到并行集合中,然后将整个内容复制回来。如果您使用 Vector,那么它就不必做这些额外的工作。

关于scala - scala 并行收集处理的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com