scala 集合自带并行机制

Scala为了充分使用多核CPU,提供了并行集合实现(有别于前面的串行集合),用于多核环境的并行计算。par

主要算法有:

  1. Divide and Conquer: 分治算法,Scala 通过splitters(分解器) combiners(组合器)等抽象层来实现,有点类似hadoop的MapReduce,主要思想是将计算工作分解为很多任务,分发给不同处理器处理,然后将返回结果收集。
  2. Work Stealin 算法 学数学,主要用于负责任务调度负载均衡Load-Balancing ,通俗点说就是自己完成自己任务后发现还有别人活没干完,主动或者被安排帮他人一起干,达到最快速完成任务的目的。

案例

import scala.collection.Parallelizable

object aiguigu {
  def main(args: Array[String]): Unit = {
    (1 to 5).foreach(print) // 挨个打印数据 1 2 3 4 5
    println()
    (1 to 5).par.foreach(print)  // 会打印出随机的数字结果 比如
    println()

    val result1 = (0 to 100).map{case _ => Thread.currentThread().getName}.distinct
    val result2 = (0 to 100).par.map{case _ => Thread.currentThread().getName}.distinct
    println(result1)
    println("="*25)
    println(result2)
  }
}

结果如下: 

12345
42531
Vector(main)
=========================
ParVector(ForkJoinPool-1-worker-5, ForkJoinPool-1-worker-1, ForkJoinPool-1-worker-3, ForkJoinPool-1-worker-7)

 

posted @ 2019-10-31 19:44  sowhat1412  阅读(349)  评论(0编辑  收藏  举报