tpl threading thread tasks programming parallel paralelismo net library examples asp .net parallel-processing

threading - ¿Cuáles son las mejores opciones actuales para paralelizar una aplicación.NET intensiva en CPU?



tpl c# (7)

@Larsenal

Si desea sucursal fuera de .NET, ha habido mucha discusión sobre los Threading Building Blocks de Intel, que es una biblioteca paralela para C ++.

Esta es una pregunta abierta. ¿Qué enfoques debería considerar?


Creo que también podríamos incluir enfoques no específicos de .NET para el procesamiento paralelo si se encuentran entre las mejores opciones a considerar.


Hay algunas extensiones paralelas a .NET que están actualmente en pruebas y disponibles en el Centro de Desarrolladores de Computación en Paralelo de Microsoft. Tienen algunos elementos interesantes que esperarías como Foreach paralelo y una versión paralela de LINQ llamada PLINQ. Parte de la mejor información sobre las extensiones se encuentra en el Canal 9 .


Hay muchas opciones y la mejor solución dependerá de la naturaleza del problema que está tratando de resolver. Si está tratando de resolver un problema embarazosamente paralelo , dividir y paralelizar las tareas será trivial. En ese caso, el desafío vendrá en la distribución y administración de los datos utilizados.

Algunas sugerencias serían:



Su primer paso es encontrar y comprender el paralelismo en su problema. Es realmente fácil escribir código de subprocesos múltiples que no funciona mejor que el código de subproceso único que reemplaza. "Patrones para programación en paralelo" (Amazon) es una excelente introducción a los conceptos clave.

Una vez que tenga un diseño viable, comience a leer los artículos en el tema "Concurrencia" en los archivos de la Revista MSDN (enlace) , particularmente cualquier cosa escrita por Jeff Richter. Esos le darán las tuercas y tornillos en las construcciones de subprocesamiento específicas de Windows y .NET. (La sección multi-threading en "CLR via C # (Amazon) de Richter es corta, pero muy perspicaz, muy recomendable).