【问题标题】:Microsoft's CCR vs Task Parallel Library微软的 CCR 与任务并行库
【发布时间】:2010-10-22 00:39:08
【问题描述】:

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

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

2) 任务并行库 (TPL)(.NET 4.0 的一部分,现在处于 Beta 1 版本中)

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

【问题讨论】:

  • 读取erlang并发,ccr是erlang并发copy,典型的微软方式。任务并行是多线程的

标签: .net ccr task-parallel-library


【解决方案1】:

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

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

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

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

【讨论】:

  • schelfthout:从前几天开始免费发布(终于)
【解决方案2】:

这不是一个非此即彼的场景。 CCR 是一个支持某些编程模式的库。您可以像这样混合 CCR 和 TPL 代码,这是一个 Parallel.For 内部的接收委托:

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

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 2012-02-22
    • 2010-11-10
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多