在Scala标准库中包含的并行容器通过免去并行化的底层细节,以方便用户并行编程,同时为他们提供一个熟悉而简单的高层抽象。希望隐藏在抽象容器之后的隐式并行性将带来可靠的并行执行,并进一步靠近主流开发者的工作流程。
原理其实很简单-容器是抽象编程中被广泛熟识和经常使用的类,并且考虑到他们的规则性,容器能够使程序高效且透明的并行化。通过使用户能够在并行操作有序容器的同时改变容器序列,Scala的并行容器在使代码能够更容易的并行化方面做了很大改进。
val list = (1 to 10000).toList
list.map(_ + 42)//串行
list.par.map(_ + 42)//并行,list.par返回ParSeq对象
//或等价的
ParSeq(1,2,3).map(_ + 42)
以下为scala的并行容器:
ParSeq//list.par
ParArray//array.par
ParVector
mutable.ParHashMap
mutable.ParHashSet
immutable.ParHashMap
immutable.ParHashSet
ParRange
ParTrieMap (collection.concurrent.TrieMap scala 2.10以后)
通过调用顺序容器(sequential collections)的par方法,顺序容器(sequential collections)可以被转换为并行容器;通过调用并行容器的seq方法,并行容器可以被转换为顺序容器。
TrieMap类实现了并发、无锁的散列数组,其目的是支持可伸缩的并发插入和删除操作,并提高内存使用效率。
参考
https://docs.scala-lang.org/zh-cn/overviews/parallel-collections/overview.html
https://docs.scala-lang.org/overviews/parallel-collections/overview.html
https://notebook.community/jasonding1354/ScalaFAQ/collections/collection_intro
tireMap使用示例:https://vimsky.com/examples/detail/scala-class-scala.collection.concurrent.TrieMap.html