2009-04-15 8 views
6

Microsoft propose au moins deux approches différentes pour améliorer le support des opérations simultanées.Bibliothèque parallèle CCR vs Task de Microsoft

1) La coordination Concurrency Runtime (CCR), qui fait partie de Microsoft Robotics Studio et CCR & DSS Toolkit

2) Tâche Paralell Bibliothèque (TPL) (Une partie de .NET 4.0 et maintenant en version bêta 1 version)

Je voudrais savoir si quelqu'un a de l'expérience avec ces deux logiciels différents et les comparer et les contraster?

+0

Lire concurrency Erlang, est ccr copie concurrency Erlang, façon typique Microsoft. La tâche parellel est multi-threading – mamu

Répondre

9

En général, les deux cadres ont des objectifs complémentaires mais différents.

Le CCR offre des primitives pour la coordination des processus concurrents. La coordination est le ciment qui fait fonctionner tout un ensemble de processus - de sorte que le CCR offre des primitives pour l'échange de messages par le biais de canaux. Les processus peuvent attendre qu'un message arrive sur un canal, ou un certain nombre de canaux, ou l'un d'un certain nombre de canaux et ainsi de suite. C'est un paradigme particulier pour la coordination des processus concurrents qui fonctionne bien. Notez également que ce n'est pas gratuit - vous devez acheter si de Microsoft séparément.

Le TPL offre des primitives et une infrastructure pour paralléliser calculs ou algorithmes semi-automatiquement. L'une des primitives les plus évidentes est la boucle parallèle - ressemble à une boucle for mais tente d'exécuter la boucle en parallèle. Donc, si vous avez un tas de processus que vous souhaitez coordonner à un niveau plus élevé que l'utilisation de verrous et d'états partagés, utilisez le CCR. Si vous avez un processus de calcul intensif que vous souhaitez exécuter efficacement sur une machine multicœur, utilisez le TPL.

+4

schelfthout: depuis quelques jours il est sorti gratuitement (enfin) – Toad

5

Ce n'est pas un scénario avec ou. Le CCR est une bibliothèque qui prend en charge certains modèles de programmation. Vous pouvez Intermix CCR et le code TPL comme celui-ci, voici une Parallel.For à l'intérieur d'un délégué de réception:

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