加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala并行采集处理的性能

发布时间:2020-12-16 18:22:44 所属栏目:安全 来源:网络整理
导读:我有一些场景,我需要一次处理数千条记录.有时,它可能是数百,可能高达30000条记录.我在考虑使用 scala的并行集合.所以只是为了理解差异,我写了一个简单的pgm,如下所示: object Test extends App{ val list = (1 to 100000).toList Util.seqMap(list) Util.pa
我有一些场景,我需要一次处理数千条记录.有时,它可能是数百,可能高达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

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

解决方法

问题是你正在执行的操作是如此之快(只是增加两个整数),这使得并行化的开销不仅仅是好处.如果操作较慢,并行化才真正有意义.

可以这样想:如果你有8个朋友,你给每个人一个整数写在一张纸上并告诉他们加一个,把结果写下来,然后把它还给你,你会在给他们之前记录下来下一个整数,你花了很多时间来回传递消息,你可以完成所有更快的添加.

另外:永远不要在List上执行.par,因为并行化过程必须将整个列表复制到并行集合中,然后将整个事件复制回来.如果你使用Vector,那么它不需要做额外的工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读