stringtranslate.com

Extensiones paralelas

Parallel Extensions fue el nombre de desarrollo de una biblioteca de concurrencia administrada desarrollada por una colaboración entre Microsoft Research y el equipo CLR de Microsoft . La biblioteca se lanzó en la versión 4.0 de .NET Framework . [1] Está compuesta por dos partes: Parallel LINQ (PLINQ) y Task Parallel Library (TPL). [2] [3] También consta de un conjunto de estructuras de datos de coordinación (CDS), conjuntos de estructuras de datos que se utilizan para sincronizar y coordinar la ejecución de tareas concurrentes. [4]

LINQ paralelo

PLINQ , o Parallel LINQ , paraleliza la ejecución de consultas sobre objetos (LINQ to Objects) y datos XML (LINQ to XML). PLINQ está pensado para exponer el paralelismo de datos mediante el uso de consultas. [2] Cualquier cálculo sobre objetos que se haya implementado como consultas puede ser paralelizado por PLINQ. Sin embargo, los objetos necesitan implementar la IParallelEnumerableinterfaz, que está definida por el propio PLINQ. Internamente, utiliza TPL para la ejecución. [4] [5]

Biblioteca de tareas paralelas

La biblioteca de tareas paralelas ( TPL ) es el componente de paralelismo de tareas de las extensiones paralelas para .NET. [6] Expone construcciones paralelas como paralelos Fory ForEachbucles, utilizando llamadas de métodos y delegados regulares , por lo que las construcciones se pueden usar desde cualquier lenguaje CLI . El trabajo de generar y terminar subprocesos , así como escalar el número de subprocesos de acuerdo con el número de procesadores disponibles, lo realiza la propia biblioteca, [3] utilizando un programador que roba trabajo . [7]

TPL también incluye otras construcciones como Task y Future . Una Task es una acción que se puede ejecutar independientemente del resto del programa. En ese sentido, es semánticamente equivalente a un hilo, excepto que es un objeto más liviano y no tiene la sobrecarga de crear un hilo del sistema operativo. Las tareas se ponen en cola mediante un objeto del Administrador de tareas y se programan para ejecutarse en varios hilos del sistema operativo en un grupo de hilos cuando llega su turno.

Future es una tarea que devuelve un resultado. El resultado se calcula en un subproceso en segundo plano encapsulado por el objeto Future y se almacena en un búfer hasta que se recupera. [3] Si se intenta recuperar el resultado antes de que se haya calculado, el subproceso solicitante se bloqueará hasta que el resultado esté disponible. [6]

La otra construcción de TPL es la clase Parallel . TPL proporciona una forma básica de paralelismo estructurado a través de tres métodos estáticos en la clase Parallel:

Paralelo.Invocar
Ejecuta una serie de delegados de acción en paralelo y luego espera a que se completen.
Paralelo.Para
Equivalente paralelo de un bucle for en C#
Paralelo.ParaCada
Equivalente paralelo de un bucle foreach de C#

Arquitectura

El concepto principal de las extensiones paralelas para .NET es una Task, que es una pequeña unidad de código, generalmente representada como una función lambda , que se puede ejecutar de forma independiente. Tanto PLINQ como la API TPL proporcionan métodos para crear las tareas: PLINQ divide una consulta en tareas más pequeñas y los métodos Parallel.For, Parallel.ForEachy Parallel.Invokedividen un bucle en tareas.

PFX incluye un Task Managerobjeto que programa las tareas para su ejecución. Un administrador de tareas contiene una cola global de tareas que luego se ejecutan. También encapsula varios subprocesos en los que se ejecutan las tareas. De forma predeterminada, se crean tantos subprocesos como procesadores (o núcleos de procesador) haya en el sistema, aunque este número se puede modificar manualmente. Cada subproceso está asociado con una cola de tareas específica para subprocesos. Cuando está inactivo, cada subproceso toma un lote de tareas y las coloca en su cola local, donde luego se ejecutan, una por una. Si la cola global está vacía, un subproceso buscará tareas en las colas de sus pares y tomará las tareas que hayan estado en la cola durante más tiempo ( robo de tareas ). Cuando están en ejecución, las tareas se ejecutarán de forma independiente, y el cambio de estado de una tarea será independiente de las demás. Como resultado, si utilizan un recurso compartido, aún deben sincronizarse manualmente mediante bloqueos u otras construcciones.

Véase también

Referencias

  1. ^ "Novedades de .NET Framework 4" . Consultado el 21 de septiembre de 2011 .
  2. ^ ab "Programación en la era de la concurrencia: programación concurrente con PFX" . Consultado el 16 de octubre de 2007 .
  3. ^ abc "MSDN Magazine: Task Parallel Library". Archivado desde el original el 14 de octubre de 2007. Consultado el 16 de octubre de 2007 .
  4. ^ ab "CTP de junio de 2008: extensiones paralelas para .NET FX" . Consultado el 6 de agosto de 2008 .
  5. ^ "Agregaciones más potentes en PLINQ" . Consultado el 6 de agosto de 2008 .
  6. ^ ab Duffy, Joe (2009). Programación concurrente en Windows . pp. 887–929. ISBN 978-0321434821.
  7. ^ Leijen, Daan; Schulte, Wolfram; Burckhardt, Sebastian (2009). "El diseño de una biblioteca de tareas paralelas". ACM SIGPLAN Notices . 44 (10): 227. CiteSeerX 10.1.1.146.4197 . doi :10.1145/1639949.1640106. 

Enlaces externos