0
我試圖結合懶惰和並行集合的好處: Vector(/* some values....*/).par.view
- 它提供了巨大的性能提升。但Scala 2.12將該方法標記爲ParSeqLike已棄用。 Parallel Collection的惰性使用有什麼問題?是否有任何替代品?爲什麼在Scala中從ParSeqLike中棄用View方法?
我試圖結合懶惰和並行集合的好處: Vector(/* some values....*/).par.view
- 它提供了巨大的性能提升。但Scala 2.12將該方法標記爲ParSeqLike已棄用。 Parallel Collection的惰性使用有什麼問題?是否有任何替代品?爲什麼在Scala中從ParSeqLike中棄用View方法?
並行集合的惰性使用有什麼問題?
如果你看的定義,它是不平行的:它定義爲def view = seq.view
(這樣Vector(/* some values....*/).par.view
應該是一樣Vector(/* some values....*/).view
)。這就是文檔告訴你的:直接使用seq.view
,所以很明顯它不是平行的。可能ParSeqLike
的一些後裔可能會覆蓋它,但ParVector
不會。
看起來在2.10中是可行的。儘管在2.11中這個能力被移除了。 https://github.com/scala/scala/commit/51cd47491e979b10b5d86992dd2e3efd08f7e214#diff-975c6a2824a578e038b3c345a3c5f062 看起來好像這是向收集簡化邁出的一步。 –
Btw,Vector(...)。par.view現在在功能上與Vector(...)。view相同。所以請避免使用它。 我可以想到沒有簡單的方法解決這個問題。似乎你必須選擇視圖或目前。你可以手動分組()你的集合,並在每個塊上使用par來節省中間對象的內存,但它有點怪異。 –
@BruceLowe,工作表顯示了不同的簽名。 –