¿Cuáles son los análogos de QtConcurrent para Scala (o Java)? Es decir, la implementación simplificada de MapReduce, el mapa paralelo y foldl. GraciasScala análogos de QtConcurrent
Respuesta
Descubre Scala Parallel Collections de vídeo y el papel "A Generic Parallel Collection Framework"
This states: colecciones son paralelas en el current development builds y se dará a conocer como parte de Scala 2.9. Consulte el plan de publicación here, Scala 2.9 se puede descargar here.
Puede recorrer un largo camino usando scala.actors.Futures
y map
/flatMap
normal en las colecciones. Sin embargo, no es fácilmente paralelizable fold
.
Si usa varios hosts, usaría Akka's enviar y recibir-futuro.
Puede usar Colecciones paralelas de Scala. Actualmente son parte de los lanzamientos nocturnos de Scala y se lanzarán en Scala 2.9. La idea es que la mayoría de las operaciones disponibles en colecciones regulares estén paralelizadas, de modo que las colecciones paralelas se puedan usar de la misma manera.
Actualmente, hay algunos tipos de colecciones disponibles: rangos paralelos, matrices paralelas y hash paralelos. Por ejemplo, se puede invocar un paralelas map
y fold
operaciones en un conjunto paralelo de esta manera:
scala> val pa = (0 until 10000).toArray.par
pa: scala.collection.parallel.mutable.ParArray[Int] = ParArray(0, 1, 2, 3, 4, 5, 6,...
scala> pa.map(_ + 1)
res0: scala.collection.parallel.mutable.ParArray[Int] = ParArray(1, 2, 3, 4, 5, 6, 7,...
scala> pa map { v => if (v % 2 == 0) v else -v }
res1: scala.collection.parallel.mutable.ParArray[Int] = ParArray(0, -1, 2, -3, 4, -5,...
scala> pa.fold(0) { _ + _ }
res2: Int = 49995000
Hay otras operaciones de recogida paralelos disponibles también. Tenga en cuenta que fold
debe tomar un operador asociativo: en el ejemplo anterior, la adición es asociativa ((A + B) + C == A + (B + C)), es decir, puede agregar subsecuencias de números en cualquier orden y siempre lo hará obtener la misma suma (reduce
tiene un contrato similar).
Otra cosa a tener en cuenta es que los cierres pasados a colecciones paralelas se invocan simultáneamente. Si tienen efectos secundarios, como la modificación de una variable local en el entorno, estos accesos deben estar sincronizados. Por ejemplo, se podría hacer algo como esto:
scala> var a = 0
a: Int = 0
scala> pa foreach { a += _ }
scala> a
res1: Int = 49995000
scala> a = 0
a: Int = 0
scala> pa foreach { a += _ }
scala> a
res7: Int = 49990086
y tienen resultados diferentes cada vez, debido a que el foreach
invoca { a += _ }
en paralelo. En el ejemplo anterior, a
se debe sincronizar, proteger con un candado o atómico.
Pero la idea es usar combinators incorporados para realizar una tarea e inclinarse hacia la programación funcional, evitando los efectos secundarios locales como en el ejemplo anterior.
Es posible que desee leer un poco más acerca de sus mecanismos internos en los enlaces proporcionados en la otra respuesta.
Muy buena respuesta con un "empujón" lejos de las mutaciones ;-) –
- 1. LINQ análogos en Scala?
- 2. QtConcurrent con función de miembro
- 3. Lectura de archivos de imagen con QImageReader usando QtConcurrent
- 4. Marcado líquido en Java/Scala
- 5. es posible utilizar QtConcurrent :: run() con un miembro de función de una clase
- 6. ¿Cómo puedo utilizar un QFutureWatcher con QtConcurrent :: run() sin una condición de carrera
- 7. Scala AST en Scala
- 8. Objeto Scala scala
- 9. Evitar pérdidas de memoria Scala - Scala constructores
- 10. Pregunta sobre el cierre de Scala (de "Programación en Scala")
- 11. ¿Cómo obtengo la versión de Scala dentro de Scala?
- 12. Scala SBT: Scala versión del compilador
- 13. Scala Tipo de retorno
- 14. biblioteca numérica de Scala
- 15. mapa Scala de clasificación
- 16. Incoherencias de Colecciones Scala
- 17. igualdad de referencia Scala
- 18. scala - sintaxis de rendimiento
- 19. `doto` de Scala
- 20. Scala asignación de Vals
- 21. Serialización fácil de Scala?
- 22. Uso varargs de Scala
- 23. Scala pregunta de desempeño
- 24. Vencimiento de Scala-LLVM?
- 25. Scala - matrices de impresión
- 26. SBT de Scala IDE
- 27. serialización de Scala XML
- 28. Propiedades de Scala Pregunta
- 29. Seguridad de scala runtime
- 30. equivalente de Scala Hoogle?
ver también http://stackoverflow.com/questions/1751953/concurrent-map-foreach-in-scala/1753224#1753224 – oluies