Создание параллельных представлений Scala с помощью X.par.view против X.view.par?
Согласно статье о параллельных коллекциях и поиске в Интернете, параллельные коллекции должны работать с представлениями, но я не понимаю разницу между
coll.par.view.someChainedIterations
а также
coll.view.par.someChainedIterations
Это похоже на coll.view.par
теряет видимость коллекции:
scala> val coll = 1 to 3
coll: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)
scala> coll.view.par
res2: scala.collection.parallel.ParSeq[Int] = ParArray(1, 2, 3)
scala> coll.par.view
res3: java.lang.Object with scala.collection.parallel.ParSeqView[Int,scala.collection.parallel.immutable.ParSeq[Int],scala.collection.immutable.Seq[Int]] = $anon$1(1, 2, 3)
но я не знаю, почему. Это особенность или ошибка?
1 ответ
Решение
Это, вероятно, упущение, и должно быть исправлено.
par
на последовательные представления могут быть реализованы путем вызова par
на underlying
коллекция, которая приведет к цепочке рекурсивных par
звонки до underlying
является строгой коллекцией, из которой изначально было получено представление. Если эта коллекция может быть эффективно превращена в соответствующую параллельную коллекцию, тогда вновь полученное параллельное представление может быть эффективно построено (см. Здесь).