2009-04-15 30 views
6

微软至少有两种不同的方式来改进对并发操作的支持。微软的CCR vs任务并行库

1)是并发协调运行时(CCR),这是微软机器人工作室的一部分,CCR & DSS Toolkit

2)任务Paralell库(TPL)(的.NET 4.0部分,现在在Beta 1版)

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

+0

读二郎山并发,CCR是Erlang的并发拷贝,典型的微软的方式。任务parellel是多线程的 – mamu 2010-10-14 04:58:58

回答

9

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

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

TPL提供基元和基础结构,以便半自动地并行运算计算或算法。最明显的原语之一是并行for循环 - 看起来有点像for循环,但试图并行执行循环。

所以,如果你有一堆你想在高于使用共享状态和锁定的级别上进行协调,请使用CCR。如果您希望在多核计算机上高效运行计算密集型进程,请使用TPL。

+4

schelfthout:自几天前它已经免费发布(最终) – Toad 2010-06-05 14:50:36

5

这不是一种任何一种情况。 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() + " "); 
        }); 
       } 
      )); 
     } 
    } 
}