2009-04-15 43 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() + " "); 
        }); 
       } 
      )); 
     } 
    } 
}