tpl programming parallel net asparallel c# .net linq plinq

net - parallel programming c#



¿Exactamente qué es PLINQ? (5)

De las Extensiones Paralelas de Wikipedia:

Parallel LINQ (PLINQ) es un motor de ejecución de consultas concurrente para LINQ, paralelizando la ejecución de consultas en objetos (LINQ to Objects) y datos XML (LINQ to XML). PLINQ está destinado a exponer el paralelismo de datos mediante el uso de consultas. Cualquier cálculo sobre objetos que se haya implementado como consultas se puede paralelizar con PLINQ. Sin embargo, los objetos deben implementar la interfaz IParallelEnumerable, que está definida por PLINQ. Internamente usa TPL para su ejecución.

PLINQ se agregó en .NET 4.0 Framework como una extensión de LINQ.

  • ¿Qué es?
  • ¿Qué problemas resuelve?
  • ¿Cuándo es apropiado y cuándo no?

Es una biblioteca que le permite realizar una consulta LINQ normal, dividirla en tareas más pequeñas y ejecutar cada tarea individual en varios subprocesos aprovechando los núcleos del procesador.


Esto es LINQ paralelo. Es una forma de ejecutar consultas LINQ en paralelo en sistemas multi-core / multiprocesador, para (con suerte) acelerarlos.

Hay un buen artículo sobre esto en MSDN Magazine .

Para obtener detalles y planes actuales, recomiendo leer artículos sobre la programación paralela con el blog del equipo .NET . Ellos son el equipo que implementa las extensiones paralelas, incluido PLINQ.


Le permite agregar .AsParallel a su LINQ para intentar ejecutar la consulta usando tantos procesadores como sea posible. Limpio, pero aún necesitas saber un poco si tu algoritmo es "paralelizable", no es mágico.

Básicamente, elimina la necesidad de administrar un grupo de subprocesos y gestiona la sincronización de los resultados que regresan de cada subproceso; normalmente, sin la biblioteca de extensiones paralelas, tendría que hacer esto manualmente.


PLINQ es LINQ ejecutado en Paralelo, es decir, usa tanta potencia de procesamiento como la que tiene en su computadora actual.

Si tiene una computadora con 2 núcleos, como un procesador de doble núcleo, sus operadores de Language Integrated Query harán el trabajo en paralelo con ambos núcleos.

Al utilizar "solo" LINQ no obtendrá el mismo rendimiento porque los operadores estándar de Language Integrated Query no paralelizarán su código. Eso significa que su código se ejecutará en serie y no aprovechará todos los núcleos de procesador disponibles.

Hay muchos operadores de consulta PLINQ capaces de ejecutar su código utilizando patrones paralelos bien conocidos.

Eche un vistazo a la publicación de mi blog en la que le muestro la velocidad que obtiene cuando ejecuta una consulta LINQ simple en paralelo usando el método de extensión AsParallel:

Paralelo LINQ (PLINQ) con Visual Studio 2010/2012 - Prueba de rendimiento

Si quieres profundizar usando PLINQ, te aconsejo que leas:

Patrones para la programación en paralelo: comprensión y aplicación de patrones paralelos con .NET Framework 4