Scala fornisce un modo per eseguire operazioni di mappe parallele come parte della lingua standard?Operazioni sulla mappa parallela?
Ad esempio, dato:
scala> val a = List((1,2), (3,4), (3,6))
a: List[(Int, Int)] = List((1,2), (3,4), (3,6))
posso fare:
scala> a.map(tup => tup._1 + tup._2)
res0: List[Int] = List(3, 7, 9)
Tuttavia, al meglio delle mie conoscenze questa mappa la funzione fornita oltre l'elenco degli oggetti in modo sequenziale. Esiste un modo integrato per applicare la funzione a ciascun elemento in un thread separato (o equivalente) e i risultati raccolti in un elenco risultante?
Non usare 'list' per le operazioni distribuite (' par'). Dovresti usare un 'IndexedSeq'. – senia
@senia - puoi solo approfondire il motivo per cui utilizzare un elenco è una cattiva idea in questo caso? Non ho bisogno che la lista risultante sia ordinata in alcun modo. – csvan
È a causa del modo in cui il metodo 'par' crea' raccolta parallela'. Per 'Vector' (implementazione predefinita di 'IndexedSeq'),' Range' e 'Array', essa avvolge solo la raccolta iniziale con un wrapper leggero. Ma per 'List' dovrebbe creare una collezione completamente nuova, potrebbe portare a problemi di prestazioni. Vedi [Creating a Parallel Collection] (http://docs.scala-lang.org/overviews/parallel-collections/overview.html#creating_a_parallel_collection). – senia