微软的CCR与任务并行库

时间:2009-04-15 02:43:52

标签: .net ccr task-parallel-library

Microsoft至少有两种不同的方法可以改进对并发操作的支持。

1)并发协调运行时(CCR)是Microsoft Robotics Studio的一部分,是CCR & DSS Toolkit

2)Task Paralell Library(TPL)(.NET 4.0的一部分,现在是Beta 1版本)

我想知道是否有人对这两种不同的软件有经验并会对它们进行比较和对比?

2 个答案:

答案 0 :(得分:9)

总的来说,两个框架都有互补但不同的目标。

CCR提供协调并发进程的原语。协调是使一堆进程作为一个整体工作的粘合剂 - 因此CCR提供了通过所谓的通道交换消息的原语。进程可以等待消息到达频道,或多个频道,或多个频道中的任何一个等等。这是协调并发流程的特殊范例。另请注意,它不是免费的 - 您必须单独从Microsoft购买。

TPL半自动地为 parallellize 计算或算法提供原语和基础设施。其中一个最明显的原语是并行for循环 - 看起来有点像for循环但是试图并行执行循环。

因此,如果您想要在比使用共享状态和锁更高级别进行协调的一堆进程中使用CCR。如果您希望在多核计算机上高效运行计算密集型流程,请使用TPL。

答案 1 :(得分:5)

这不是一个/或两个场景。 CCR是一个支持某些编程模式的库。你可以像这样混合使用CCR和TPL代码,这里是一个Parallel.For在一个Receive委托中:

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