视图可以与并行集合一起使用吗?



在集合的映射中查找结果的习惯用法如下:

list.view.map(f).find(p)

其中listList[A], fA => B, pB => Boolean

是否可以使用view与并行集合?我问是因为我得到了一些非常奇怪的结果:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val f : Int => Int = i => {println(i); i + 10}
f: Int => Int = <function1>
scala> val list = (1 to 10).toList
list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> list.par.view.map(f).find(_ > 5)
1
res0: Option[Int] = Some(11)
scala> list.par.view.map(f).find(_ > 5)
res1: Option[Int] = None

参见Martin Odersky等人讨论新的并行集合的论文"A Generic Parallel Collection Framework"。第8页有一节"并行视图",讨论了viewpar如何一起使用,以及这如何提供视图和并行计算的性能优势。

对于您的具体示例,这绝对是一个bug。exists方法也中断了,并且在一个列表上中断了它对所有其他列表的中断,所以我认为这是一个问题,操作可能在中途中止(findexists一旦有答案就可以停止),以某种方式设法中断线程池。这可能与传递给并行集合的函数内部抛出异常的错误有关。

相关内容

  • 没有找到相关文章

最新更新