Pregunta

Microsoft tiene al menos dos approches diferentes a un soporte mejorado para operaciones simultáneas.

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

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

Me gustaría saber si alguien tiene experiencia con estas dos piezas diferentes de software y volvería a comparar y contrastar ellos?

¿Fue útil?

Solución

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 un montón de procesos de trabajo en su conjunto - por lo que el CCR ofrece primitivas para el intercambio de mensajes a través de los denominados canales. Los procesos pueden esperar a que llegue un mensaje en un canal, o un número de canales, o uno cualquiera de un número de canales y así sucesivamente. Este es un paradigma particular para la coordinación de los procesos concurrentes que funciona bien. Tenga en cuenta también que no es libre -. Usted tiene que comprar si desde Microsoft separado

El TPL ofrece primitivas e infraestructura a parallellize cálculos o algoritmos semi-automática. Una de las primitivas más obvias no es el paralelo de bucle -. Se ve como una especie de bucle, pero trata de 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 usted tiene un proceso de cálculo intensivo que desea ejecutar de manera eficiente en una máquina multi-núcleo, utilice el TPL.

Otros consejos

No es un bien / o escenario. El CCR es una biblioteca que es compatible con ciertos patrones de programación. Se puede entremezclar CCR y el código TPL como este, que aquí hay una Parallel.For en el interior de un delegado Recibir:

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() + " ");
                    });
                }
            ));
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top