Подтвердить что ты не робот

Операции параллельной карты?

Предоставляет ли 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)

Однако, насколько мне известно, это последовательно отображает предоставленную функцию над объектами списка. Есть ли встроенный способ применения функции к каждому элементу в отдельном потоке (или эквиваленте), а результаты затем собираются в результирующий список?

4b9b3361

Ответ 1

Если вы добавите par, вы получите параллельный сбор, и операции над ним будут обрабатываться параллельно. Чтобы преобразовать обратно в обычный вызов коллекции a toList.

Итак, ваш код будет выглядеть так:

a.par.map(tup => tup._1 + tup._2).toList

Также проверьте документацию.

Ответ 2

par разбивает ваш список на обработку по нескольким потокам. Затем вы можете регулировать процесс потоковой обработки путем модификации члена tasksupport результата ParSeq.