0

我试图结合懒惰和并行集合的好处: Vector(/* some values....*/).par.view - 它提供了巨大的性能提升。但Scala 2.12将该方法标记为ParSeqLike已弃用。 Parallel Collection的惰性使用有什么问题?是否有任何替代品?为什么在Scala中从ParSeqLike中弃用View方法?

+0

看起来在2.10中是可行的。尽管在2.11中这个能力被移除了。 https://github.com/scala/scala/commit/51cd47491e979b10b5d86992dd2e3efd08f7e214#diff-975c6a2824a578e038b3c345a3c5f062 看起来好像这是向收集简化迈出的一步。 –

+0

Btw,Vector(...)。par.view现在在功能上与Vector(...)。view相同。所以请避免使用它。 我可以想到没有简单的方法解决这个问题。似乎你必须选择视图或目前。你可以手动分组()你的集合,并在每个块上使用par来节省中间对象的内存,但它有点怪异。 –

+0

@BruceLowe,工作表显示了不同的签名。 –

回答

0

并行集合的惰性使用有什么问题?

如果你看的定义,它是不平行的:它定义为def view = seq.view(这样Vector(/* some values....*/).par.view应该是一样Vector(/* some values....*/).view)。这就是文档告诉你的:直接使用seq.view,所以很明显它不是平行的。可能ParSeqLike的一些后裔可能会覆盖它,但ParVector不会。

相关问题