Scala為了充分使用多核CPU呵扛,提供了并行集合(有別于前面的串行集合)铅搓,用于多核環(huán)境的并行計算拗慨。
主要用到的算法有:
Divide and conquer : 分治算法舞竿,Scala通過splitters京景,combiners等抽象層來實現(xiàn),主要原理是將計算工作分解很多任務骗奖,分發(fā)給一些處理器去完成确徙,并將它們處理結果合并返回
Work stealin:算法醒串,主要用于任務調(diào)度負載均衡(load-balancing),通俗點完成自己的所有任務之后鄙皇,發(fā)現(xiàn)其他人還有活沒干完芜赌,主動(或被安排)幫他人一起干,這樣達到盡早干完的目的伴逸。
1较鼓、打印1~5
這個案列 可以證明 確實分配到多核線程中去執(zhí)行
(1 to 5).foreach(println(_))
println()
//使用par 后,就是使用多個cpu運算
(1 to 5).par.foreach(println(_))
尖叫提示:par 其實就是利用cpu的時間片端违柏,提高速度
2博烂、查看并行集合中元素訪問的線程
val result1 = (0 to 10000).map{case _ => Thread.currentThread.getName}.distinct
val result2 = (0 to 10000).par.map{case _ => Thread.currentThread.getName}.distinct
println(result1)
println(result2)
尖叫提示:distinct是去重的意思,使用par 會使用多個子線程去跑任務