He estado aprendiendo F # recientemente, estando particularmente interesado en su facilidad para explotar el paralelismo de datos. La expresión data |> Array.map |> Async.Parallel |> Async.RunSynchronously
parece muy fácil de entender y de usar y obtener un valor real.¿Por qué no debería usar F # flujos de trabajo asíncronos para el paralelismo?
¿Por qué es que async
no está pensado para esto? Donald Syme himself dice que PLINQ y Futuros son probablemente una mejor opción. Y otras respuestas que he leído aquí concuerdan con eso y también recomiendan TPL. (PLINQ no parece ser demasiado diferente a las funciones integradas anteriores, siempre y cuando utilice el F # Powerpack para obtener las funciones PSeq
).
F # y los lenguajes funcionales tienen mucho sentido para esto, y some applications han logrado un gran éxito con el paralelismo async
.
¿Por qué no debería Yo uso async
para ejecutar procesos de datos paralelos? ¿Qué voy a perder escribiendo el código paralelo async
en lugar de usar PLINQ o TPL?
El resumen de las preferencias es E/S -> Async, CPU -> TPL/PLINQ, facilidad de sintaxis -> Async/PLINQ. Por lo que puedo deducir de todas las fuentes, incluidos los artículos anteriores, no hay una gran desventaja en el uso de Async.Parallel para las tareas vinculadas a la CPU. ¿Son en particular las funciones de asignación de trabajos y de cola de TPL las que lo convierten en la mejor opción para las operaciones vinculadas a CPU? – Gnat