Операции параллельной карты?
Предоставляет ли Scala способ выполнения операций параллельной карты как часть стандартного языка?
Например, данный:
scala> val a = List((1,2), (3,4), (3,6))
a: List[(Int, Int)] = List((1,2), (3,4), (3,6))
Я могу сделать:
scala> a.map(tup => tup._1 + tup._2)
res0: List[Int] = List(3, 7, 9)
Однако, насколько мне известно, это последовательно отображает предоставленную функцию над объектами списка. Есть ли встроенный способ применения функции к каждому элементу в отдельном потоке (или эквиваленте), а результаты затем собираются в результирующий список?
Ответы
Ответ 1
Если вы добавите par
, вы получите параллельный сбор, и операции над ним будут обрабатываться параллельно. Чтобы преобразовать обратно в обычный вызов коллекции a toList
.
Итак, ваш код будет выглядеть так:
a.par.map(tup => tup._1 + tup._2).toList
Также проверьте документацию.
Ответ 2
par
разбивает ваш список на обработку по нескольким потокам. Затем вы можете регулировать процесс потоковой обработки путем модификации члена tasksupport
результата ParSeq
.