2010-11-12 15 views
8

Estoy buscando hacer uso de las ventajas de la programación paralela en linq mediante el uso de plinq, no estoy seguro de entender el uso completamente aparte del hecho de que va a hacer uso de todos los núcleos de la CPU de manera más eficiente, por lo que para una consulta más grande podría ser más rápido. ¿Puedo simplemente llamar a AsParallel() en llamadas de linq para hacer uso de la funcionalidad de eplinq y siempre será más rápido? ¿O debería usarlo solo cuando hay una gran cantidad de datos para consultar o procesar?Cuando debería usar AsParallel() en linq/plinq

Respuesta

7

No puede suponer que la ejecución en paralelo siempre es más rápida. Depende. En algunas situaciones ganarás mucho en procesadores multi-core haciendo cosas en paralelo. En otros casos, simplemente ralentizará las cosas, ya que los bucles paralelos tienen un pequeño sobrecalentamiento sobre bucles simples.

Por ejemplo, vea my other answer que explica por qué los bucles paralelos incrustados pueden ser un desastre.

Ahora, la mejor manera de saber si es una buena idea usar un bucle paralelo en un contexto preciso es para probar tanto en implementaciones paralelas como no paralelas y para medir el tiempo que toman.

3

Para agregar más a la respuesta, también depende de sus datos. Yendo un poco a la "vieja escuela" por un momento, podrías ir por el camino de desenrollar bucles, usar para en lugar de foreach, y así sucesivamente.

Sin embargo, realmente necesita asegurarse de que no está optimizando en micro. Dependiendo de sus búsquedas de datos y del tamaño de los datos (ciertamente con datos paginados), entonces probablemente pueda salirse con la suya sin usarlos.

Eso no quiere decir que hacer que tu linq mult-core sea consciente no es genial. Pero tenga en cuenta los costos de configuración de hacer algo así y así poder sopesar los beneficios contra las complejidades de mantener y depurar ese código.

Si su algoritmo ya es de primera categoría y luego observa las extensiones plinq, un mecanismo de reducción de mapa o similar puede ser el camino a seguir. Pero primero revise su algoritmo y sus beneficios generales. Operar en el tipo correcto de colección (etc.) del modo correcto siempre traerá sus propios beneficios (¡y problemas!).

¿Qué estás tratando de resolver?

Cuestiones relacionadas