2009-04-15 17 views
6

Microsoft hat mindestens zwei verschiedene Ansätze zur verbesserten Unterstützung für gleichzeitige Operationen.Microsoft CCR vs Aufgabe Parallelbibliothek

1) Ist die Concurrency Coordination Runtime (CCR), die Teil von Microsoft Robotics Studio und CCR & DSS Toolkit

2) Aufgabe Paralell Library (TPL) (Teil von .NET 4.0 und jetzt in der Beta-1-Version)

ist

Ich würde gerne wissen, ob jemand Erfahrung mit diesen zwei verschiedenen Stücken von Software hat und sie vergleichen und kontrastieren würde?

+0

lesen erlang Gleichzeitigkeit, ccr ist erlang Gleichzeitigkeit Kopie, typische Microsoft Art und Weise. Aufgabe parellel ist multi threading – mamu

Antwort

9

Im Großen und Ganzen haben beide Frameworks sich ergänzende, aber unterschiedliche Ziele.

Die CCR bietet Grundelemente für die Koordination von gleichzeitigen Prozessen. Koordination ist der Leim, der eine Reihe von Prozessen als Ganzes funktioniert - so bietet das CCR Primitive für den Austausch von Nachrichten über so genannte Kanäle. Prozesse können darauf warten, dass eine Nachricht auf einem Kanal oder einer Anzahl von Kanälen oder einem Kanal aus einer Anzahl von Kanälen ankommt. Dies ist ein besonderes Paradigma für die Koordination von gleichzeitigen Prozessen, die gut funktionieren. Beachten Sie auch, dass es nicht kostenlos ist - Sie müssen von Microsoft separat kaufen.

Die TPL bietet Primitive und Infrastruktur zu parallel Berechnungen oder Algorithmen halbautomatisch. Eines der offensichtlichsten Primitiven ist die parallele for-Schleife - sieht wie eine for-Schleife aus, versucht aber, die Schleife parallel auszuführen.

Wenn Sie also eine Reihe von Prozessen haben, die Sie auf einer höheren Ebene koordinieren möchten als die Verwendung von Shared State und Sperren, verwenden Sie die CCR. Wenn Sie einen rechenintensiven Prozess haben, den Sie effizient auf einem Multicore-Rechner ausführen möchten, verwenden Sie den TPL.

+4

schefthout: seit ein paar Tagen wurde es kostenlos veröffentlicht (endlich) – Toad

5

Es ist kein entweder/oder Szenario. Die CCR ist eine Bibliothek, die bestimmte Programmiermuster unterstützt. Sie können CCR und TPL Code wie folgt miteinander vermischen, ist hier eine Parallel.For innerhalb eines Delegierten Empfangen:

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() + " "); 
        }); 
       } 
      )); 
     } 
    } 
}