Extensiones paralelas

Parallel Extensions (del  inglés  -  "Parallel extensions") es una biblioteca de paralelismo administrado desarrollada como resultado de la colaboración entre Microsoft Research y el grupo CLR [1] en Microsoft . La biblioteca se lanzó en la versión 4.0 de .NET Framework [2] . Consta de dos partes: Parallel LINQ (PLINQ) y Task Parallel Library (TPL) [3] [4] . También consta de un conjunto de estructuras de datos de coordinación (CDS): conjuntos de estructuras de datos utilizados para sincronizar y coordinar la ejecución de tareas paralelas [5] .

LINQ paralelo

PLINQ o Parallel LINQ [6] paraleliza la ejecución de consultas contra objetos (LINQ for Objects) y datos XML [7] (LINQ for XML). PLINQ está diseñado para detectar el paralelismo de datos mediante consultas [3] . PLINQ puede paralelizar cualquier cálculo sobre objetos implementados como consultas. Sin embargo, los objetos deben implementar la interfaz IParallelEnumerable, que está definida por el propio PLINQ. Internamente, usa TPL [5] para ejecutar .

Biblioteca paralela de tareas

Task Parallel Library ( TPL [8] ) es el componente de paralelismo de tareas de las extensiones paralelas de .NET [9] . Proporciona construcciones paralelas, como bucles paralelos Fory , utilizando delegadosForEach y llamadas a métodos normales , por lo que las construcciones se pueden usar desde cualquier lenguaje CLI . El trabajo de generar y terminar un subproceso , así como escalar la cantidad de subprocesos de acuerdo con la cantidad de procesadores disponibles, lo realiza la propia biblioteca [4] utilizando el programador de captura gradual [10] .

TPL también incluye otras construcciones como Task y Future . Una tarea es una acción que se puede realizar independientemente del resto del programa. En este sentido, es semánticamente equivalente a un subproceso, excepto que es un objeto más ligero y no incurre en la sobrecarga de crear un subproceso del sistema operativo. El objeto Administrador de tareas pone en cola las tareas y las programa para que se ejecuten en varios subprocesos del sistema operativo en un grupo de cuando llegue su turno.

El futuro es una tarea que devuelve un resultado. El resultado se evalúa en un subproceso de fondo encapsulado por el objeto Future y se almacena en búfer hasta que se recibe [4] . Si se intenta obtener el resultado antes de que se haya calculado, el hilo solicitante se bloqueará hasta que el resultado esté disponible [9] .

Otra construcción TPL es la clase Parallel . El 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 matriz de delegados de acción en paralelo y luego espera a que se completen Paralelo.Para Equivalente paralelo de un bucle for en C# Parallel.ForEach Equivalente paralelo de un bucle foreach en C#

Arquitectura

El concepto básico de .NET Parallel Extensions es Задача, que es un pequeño bloque de código, generalmente representado como una función lambda , que se puede ejecutar de forma independiente. Tanto PLINQ como la API de TPL proporcionan métodos para crear tareas: PLINQ divide la consulta en tareas más pequeñas, mientras que los métodos y Parallel.Fordividen Parallel.ForEachel Parallel.Invokeciclo en tareas.

PFX incluye un objeto Диспетчер задачque programa la ejecución de tareas. El 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 cambiar manualmente. Cada subproceso está asociado con una cola de Tareas específica del subproceso. Mientras está inactivo, cada subproceso toma un lote de tareas y las coloca en su propia cola local, donde luego se ejecutan por turnos. Si la cola global está vacía, el subproceso buscará tareas en las colas de sus compañeros y recogerá las tareas que han estado en la cola durante más tiempo ( captura gradual de tareas ). Al ejecutarse, las Tareas se ejecutarán de forma independiente, mientras que el cambio de estado de una Tarea no depende de las demás. Como resultado, si usan un recurso compartido, todavía necesitan sincronizarse manualmente usando bloqueos u otras construcciones.

Véase también

Enlaces

  1. Abreviatura de C ommon L anguage R untime _ _
  2. Novedades en .NET Framework 4 . Consultado el 21 de septiembre de 2011. Archivado desde el original el 23 de septiembre de 2011.
  3. 1 2 Programación en la era de la concurrencia: programación paralela con PFX . Consultado el 16 de octubre de 2007. Archivado desde el original el 2 de mayo de 2008.
  4. 1 2 3 MSDN Magazine: Biblioteca paralela de tareas . Consultado el 16 de octubre de 2007. Archivado desde el original el 14 de octubre de 2007.
  5. 12 de junio de 2008. Extensiones paralelas CTP-.NET FX . Consultado el 6 de agosto de 2008. Archivado desde el original el 21 de agosto de 2008.
  6. Abreviatura de L anguage IN tegrated Query ( Consulta de idioma integrado en ruso )
  7. Abreviatura de e Xtensible M arkup L anguage ( Lenguaje de marcado extensible ruso )
  8. Abreviatura de T ask Parallel L ibrary
  9. 1 2 Joe Duffy. Programación paralela en Windows. - 2009. - P. "887–929". — ISBN 978-0321434821 .
  10. Daan Leyen; Wolfram Schulte, Sebastián Burckhardt (2009). “Diseño de la Biblioteca de Tareas Paralelas”. Notificaciones ACM SIGPLAN . 44 (10): 227. CiteSeerX  10.1.1.146.4197 . DOI : 10.1145/1639949.1640106 . Parámetro obsoleto utilizado |coauthors=( ayuda )

Enlaces externos