Function Scala:如何并行使用自定义函数

Function Scala:如何并行使用自定义函数,function,scala,parallel-processing,Function,Scala,Parallel Processing,这应该是一个快速的:) 假设我有这样一个函数: def sort: List[Int] => List[Int] def sort(seq: scala.collection.GenSeq[Int]) = ... 我想在一个名为sortPar的函数中对其进行并行化。最初我认为我需要这样做: def sortPar: List[Int] => List[Int] = ls => sort(ls.par).toList 但这当然是不可能的,因为sort需要一个

这应该是一个快速的:)

假设我有这样一个函数:

    def sort: List[Int] => List[Int]
def sort(seq: scala.collection.GenSeq[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中没有红色十字,所以我认为它应该工作,但我不知道它是否真的并行排序

非常感谢
柯蒂斯

<代码> DEFSoTPAR:列表[INT] =列表[INT]=Ls= >排序(ls)。PAR。Toistist< /Cord>不会并行执行任何事情,因为您首先调用<代码>排序(ls)< /COD>,顺序排序列表。p> 之后的调用是无用的,因为您将结果转换为并行集合,并直接将其转换回顺序
列表

你可以/应该考虑的事情:

关于你的第一个问题,有一些特性是为这种情况设计的,比如
GenMap
GenSet
或者在你的情况下
GenSeq
可能是最接近的,因为
列表
序列

sort(List(1,2,3))
sort(List(1,2,3).par)
因此,您可以这样编写排序函数:

    def sort: List[Int] => List[Int]
def sort(seq: scala.collection.GenSeq[Int]) = ...
并将其与线性或平行
Seq
一起使用

sort(List(1,2,3))
sort(List(1,2,3).par)
因此,如果使用GenSeq
可用的函数实现
排序
,则传递顺序Seq将使用顺序实现,传递
ParSeq
可能并行运行这些函数。(有些函数仍然按顺序运行,如排序的

如果您不使用具有并行实现的函数,那么您必须自己处理并行化。我个人没有这方面的经验。您可以在源代码中查看一些实现


一般来说,并不是每个函数都可以轻松并行化,因此没有标准的方法来并行化函数。您必须自己实现
sortPar
。因此,我的函数将运行sort,然后将结果转换为parSeq,然后返回列表?例如。它将按原样运行您的
排序。