Question

Microsoft a au moins deux approaches différentes pour un support amélioré pour des opérations simultanées.

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

2) Tâche Paralell Library ( TPL ) (une partie de .NET 4.0 et maintenant en version bêta 1 version)

Je voudrais savoir si quelqu'un a une expérience avec ces deux logiciels différents et comparerais et les opposer?

Était-ce utile?

La solution

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 simultanés. La coordination est la colle qui fait un tas de processus de travail dans son ensemble - de sorte que le CCR offre des primitives pour échanger des messages par soi-disant canaux. Les processus peuvent attendre un message pour arriver sur un canal ou plusieurs canaux, ou l'un quelconque d'un certain nombre de canaux et ainsi de suite. Ceci est un paradigme particulier pour la coordination des processus simultanés qui fonctionne bien. Notez également que est-il pas libre -. Vous devez acheter si de Microsoft séparément

Le TPL offre des primitives et des infrastructures à parallellize calculs ou des algorithmes semi-automatique. L'une des primitives les plus évidentes, il est parallèle à la boucle -. Ressemble un peu comme une boucle, mais tente d'exécuter la boucle en parallèle

Donc, si vous avez un tas de processus que vous souhaitez coordonner à un niveau supérieur à l'aide de l'état partagé et serrures, utilisez le CCR. Si vous avez un processus intensif de calcul que vous souhaitez fonctionner efficacement sur une machine multi-core, utilisez le TPL.

Autres conseils

Il est pas soit / ou scénario. Le CCR est une bibliothèque qui prend en charge certains modèles de programmation. Vous pouvez entremêler 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() + " ");
                    });
                }
            ));
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top