因此scala 2.9最近出现在Debian测试中,带来了新奇的并行集合.
假设我有一些相当于的代码
def expensiveFunction(x:Int):Int = {...}
def process(s:List[Int]):List[Int} = s.map(expensiveFunction)
Run Code Online (Sandbox Code Playgroud)
现在,在我的机器上实际显示文档之前,我已经收集到了关于并行集合的那些内容,我希望通过将List切换到ParList... 来并行化这个...但令我惊讶的是,没有一个!(只是ParVector,ParMap,ParSet...).
作为一个工作区,这个(或一行等效)似乎运作良好:
def process(s:List[Int]):List[Int} = {
val ps=scala.collection.parallel.immutable.ParVector()++s
val pr=ps.map(expensiveFunction)
List()++pr
}
Run Code Online (Sandbox Code Playgroud)
在我的测试代码中实现了大约x3的性能提升,并实现了更高的CPU使用率(四核和超线程i7).但它似乎有点笨重.
我的问题是一种汇总的:
ParList?ParList,我应该采用哪种更好的模式/习语,以至于我不觉得他们错过了?Vectors?(我指的是C++的土地,我通常会需要一个很好的理由使用
std::list过std::vector).