这应该是一个快速的:)
假设我有这样的功能:
def sort: List[Int] => List[Int]
我想在一个名为sortPar的函数中并行化它。最初我以为我需要这样做:
def sortPar: List[Int] => List[Int] = ls => sort(ls.par).toList
但当然这是不可能的,因为sort需要列表而不是ParSeq。经过一段时间的努力,我想出了这个解决方案,但我不太确定:
def sortPar: List[Int] => List[Int] = ls => sort(ls).par.toList
这会在运行时方面实现吗?我在eclipse中没有红十字架,所以我认为它应该可以工作,但我不知道它是否真的并行排列。
非常感谢 柯蒂斯
答案 0 :(得分:1)
def sortPar: List[Int] => List[Int] = ls => sort(ls).par.toList
并不执行任何操作,因为您首先调用sort(ls)
,它会按顺序对列表进行排序。
之后的调用是无用的,因为您将结果转换为并行集合并直接将其转换回序列List
。
您可以/应该考虑的事项:
关于您的第一个问题,有针对此类情况设计的特征,例如GenMap
,GenSet
或您的情况GenSeq
可能是最接近的问题,因为{{1} }是List
。
所以你可以写这样的排序函数:
Seq
并使用线性或平行def sort(seq: scala.collection.GenSeq[Int]) = ...
。
Seq
因此,如果使用sort(List(1,2,3))
sort(List(1,2,3).par)
可用的函数实现sort
,则传递顺序Seq将使用顺序实现,并且传递GenSeq
可能会并行运行这些函数。 (某些功能仍按顺序运行,如ParSeq
)
如果您不使用具有并行实现的函数,那么您必须自己处理并行化。我个人没有经验。您可以查看源代码中的一些实现。