2009-04-15 11 views
6

Microsoft tiene al menos dos diferentes Enfoques a un soporte mejorado para operaciones simultáneas.de Microsoft vs Parallel Library Tarea

1) es la coordinación de tiempo de ejecución de concurrencia (CCR), que es parte de Microsoft Robotics Studio y CCR & DSS Toolkit

2) Tarea Paralell Biblioteca (TPL) (Parte de .NET 4.0 y ahora en Beta 1 versión)

Me gustaría saber si alguien tiene experiencia con estos dos diferentes tipos de software y los compararía y contrastaría?

+0

Leer Erlang concurrencia, CCR es copia de concurrencia Erlang, forma típica de Microsoft. Task parellel es multi threading – mamu

Respuesta

9

En general, ambos marcos tienen objetivos complementarios pero diferentes.

El CCR ofrece primitivas para la coordinación de los procesos concurrentes. La coordinación es el pegamento que hace que muchos procesos funcionen como un todo, por lo que el CCR ofrece primitivas para intercambiar mensajes a través de los llamados canales. Los procesos pueden esperar a que llegue un mensaje a un canal, a varios canales o a cualquiera de varios canales, entre otros. Este es un paradigma particular para la coordinación de procesos concurrentes que funciona bien. Tenga en cuenta también que no es gratis, debe comprarlo de Microsoft por separado.

El TPL ofrece primitivas e infraestructura para paralelizar cálculos o algoritmos de forma semiautomática. Una de las primitivas más obvias es el bucle for paralelo: se parece a un bucle for, pero intenta ejecutar el bucle en paralelo.

Por lo tanto, si usted tiene un montón de proceso que desea coordinar en un nivel más alto que con el estado y los bloqueos compartidos, utilice el CCR. Si tiene un proceso de cálculo intensivo que le gustaría ejecutar de manera eficiente en una máquina multi-core, use el TPL.

+4

schelfthout: desde hace unos días se ha liberado de forma gratuita (finalmente) – Toad

5

No es un bien/o escenario. El CCR es una biblioteca que admite ciertos patrones de programación. Puede Intermix CCR y el código TPL como este, que aquí hay una Parallel.For en el interior de un delegado de recepción:

using System; 
using System.Threading; 
using System.Threading.Tasks; 
using Microsoft.Ccr.Core; 

namespace Demo 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Dispatcher dispatcher = new Dispatcher(); 
      DispatcherQueue taskQueue = new DispatcherQueue("Demo", dispatcher); 
      Port<int> portInt = new Port<int>(); 
      portInt.Post(Int32.Parse(args[0])); 

      Arbiter.Activate(
       taskQueue, 
       portInt.Receive(delegate(int count) 
       { 
        Parallel.For(0, count, i => 
        { 
         Console.Write(i.ToString() + " "); 
        }); 
       } 
      )); 
     } 
    } 
} 
Cuestiones relacionadas