11.11 并行集合
Scala 为了充分使用多核 CPU,提供了并行集合(有别于前面的串行集合),用于多核环境的并行计算。 主要用到的算法有:
Divide and conquer : 分治算法,Scala通过splitters,combiners等抽象层来实现,主要原理是将计算工作分解很多任务,分发给一些处理器去完成,并将它们处理结果合并返回
Work stealin算法,主要用于任务调度负载均衡(load-balancing),通俗点完成自己的所有任务之后,发现其他人还有活没干完,主动(或被安排)帮他人一起干,这样达到尽早干完的目的
package com.atguigu.day11.operate
import scala.collection.immutable
import scala.collection.parallel.immutable.ParSeq
object ParaDemo {
def main(args: Array[String]): Unit = {
// 串行
(1 to 5).foreach(println(_))
println()
// 集合调用par方法,得到并行集合. 输出是按照每个任务来的
(1 to 5).par.foreach(println(_))
// 查看每个线程的执行情况
val list1: immutable.IndexedSeq[String] = (1 to 10).map(a => {
Thread.currentThread().getName + " -> " + a
})
val list2: ParSeq[String] = (1 to 10).par.map(a => {
Thread.currentThread().getName + " -> " + a
})
println(list1)
println(list2)
}
}