Estoy empezando en el paralelismo de Haskell, he aprendido con éxito cómo usar algunas estrategias como: r0, rseq, rdeepseq, parList, parMap
. Ahora estoy buscando más eficiencia. Así que aquí está mi pregunta: ¿Cuál es la diferencia entre parList
y parBuffer
? ¿En qué casos cada estrategia es eficiente?¿Cómo elegir entre parList y parBuffer?
Respuesta
El documento menciona estos dos combinadores (link here).
parList
evalúa todos los elementos en paralelo, configurándolos todos a la vez. Sugeriría que esto sea útil cuando quiera consumir toda la lista a la vez, por ejemplo, en un problema de pliegue de mapa. Si desea evaluar un grupo de números y luego sumarlos, use parList
para la evaluación, luego realice la suma.
evalúa los primeros n elementos, y cuando se consume más allá, se activa el n siguiente, y así sucesivamente. Entonces, parBuffer
tiene sentido cuando vas a consumir la lista en fragmentos, empezando por el principio, o cuando la lista es muy grande (o infinita) y no la evaluarás por completo. Por ejemplo, si quiere encontrar las primeras 10 respuestas de una lista de artículos costosos para calcular, puede usar take 10 . filter f
con parBuffer
para evaluar en paralelo trozos consecutivos de la lista hasta que encuentre los primeros diez elementos que ' que estas buscando.
- 1. Cómo elegir entre DTD y XSD
- 2. Elegir entre Prism y Caliburn
- 3. ¿Elegir entre glMatrix, Sylvester y CanvasMatrix?
- 4. Elegir entre Dibujo y Forma en WPF
- 5. Elegir entre MEF y MAF (System.AddIn)
- 6. ¿Cómo elegir entre nuevo y reemplazar en C#?
- 7. Cómo elegir entre protobuf-csharp-port y protobuf-net
- 8. ¿Cómo elegir entre 'window.URL.createObjectURL() `y` window.webkitURL.createObjectURL() `basado en navegador
- 9. Elegir entre Berkeley DB Core y Berkeley DB JE
- 10. Elegir entre la excepción y el valor de retorno
- 11. Elegir entre Hudson y CruiseControl a largo plazo
- 12. ¿Cuándo elegir entre la interfaz web y la GUI nativa?
- 13. ¿Elegir entre métodos de instancia y funciones gratuitas?
- 14. Elegir entre java o php para GWT!
- 15. Cómo elegir entre dos métodos del mismo nombre en Java
- 16. ¿Cómo elegir entre Cassandra, Membase, Hadoop, MongoDB, RDBMS, etc.?
- 17. Elegir y prueba decompilador
- 18. ¿Cómo elegir entre el patrón de espacios en blanco?
- 19. Tabla de actualización, elegir entre 3 cadenas aleatorias, ¿cómo?
- 20. DateTimePicker: elegir fecha y hora
- 21. Tratando con la sorprendente falta de ParList en scala.collections.parallel
- 22. Cuándo elegir complementos y cuándo elegir la pista
- 23. ¿Cómo elegir entre la implementación de servicios web JAX-RS y JAX-WS?
- 24. ¿Cómo elegir un contenedor DI?
- 25. Elegir y desplegar un servidor cometa
- 26. ¿Cuáles son las diferencias entre los instaladores de MSI y EXE, y cuál debería elegir?
- 27. Elegir el mínimo entre los mínimos usando Parallel.ForEach
- 28. Elegir entre varios ejecutables con el mismo nombre (linux)
- 29. Elegir entre VS 2005/2008/2010 para aprendizaje independiente
- 30. Android: elegir entre dos idiomas sin "configuración regional"
No exactamente: 'parBuffer' evalúa el elemento' n + 1' cuando se consume el elemento principal. Esto significa que siempre debe tener los siguientes elementos 'n' disponibles desde cualquier punto que consuma el búfer. De una nota a pie de página en el documento vinculado: "Uno normalmente no usaría parList en listas largas ya que se crearían demasiadas chispas, en cambio parBuffer tiende a ser más práctico". –