Итак, scala 2,9 недавно появился в тестировании Debian, в результате чего с ним появились новые сфальсифицированные коллекции.
Предположим, что у меня есть некоторый код, эквивалентный
def expensiveFunction(x:Int):Int = {...}
def process(s:List[Int]):List[Int} = s.map(expensiveFunction)
теперь из маленького бита, который я почерпнул о параллельных коллекциях, прежде чем документы фактически появились на моей машине, я ожидал, что это распараллелит, просто переключив List на ParList
... но, к моему удивлению, там это не одно! (Только ParVector
, ParMap
, ParSet
...).
Как рабочий стол, этот (или однострочный эквивалент), кажется, работает достаточно хорошо:
def process(s:List[Int]):List[Int} = {
val ps=scala.collection.parallel.immutable.ParVector()++s
val pr=ps.map(expensiveFunction)
List()++pr
}
дает приблизительно улучшение производительности x3 в моем тестовом коде и обеспечивает значительно более высокий уровень использования ЦП (четырехъядерный процессор плюс гиперпоточность i7). Но это кажется неуклюжим.
Мой вопрос - это нечто вроде агрегированного:
- Почему нет
ParList
? - Учитывая, что нет
ParList
, существует ли Лучшая модель/идиома, которую я должен принять так, чтобы Я не чувствую, что они пропали без вести? - Я просто "за раз", используя списки a
в моих программах scala (например, все книги scala I
выкупили за 2,7 дня, которые меня научили) и
На самом деле я должен больше использовать
Vectors
? (Я имею в виду на земле С++ Мне обычно нужна довольно веская причина для использованияstd::list
надstd::vector
).