微軟至少有兩種不同的方式來改進對併發操作的支持。微軟的CCR vs任務並行庫
1)是併發協調運行時(CCR),這是微軟機器人工作室的一部分,CCR & DSS Toolkit
2)任務Paralell庫(TPL)(的.NET 4.0部分,現在在Beta 1版)
我想知道是否有人有這兩種不同的軟件的經驗,並會比較和對比它們?
微軟至少有兩種不同的方式來改進對併發操作的支持。微軟的CCR vs任務並行庫
1)是併發協調運行時(CCR),這是微軟機器人工作室的一部分,CCR & DSS Toolkit
2)任務Paralell庫(TPL)(的.NET 4.0部分,現在在Beta 1版)
我想知道是否有人有這兩種不同的軟件的經驗,並會比較和對比它們?
總的來說,兩個框架都有互補但不同的目標。
CCR提供協調併發進程的原語。協調是使一系列進程作爲一個整體工作的粘合劑 - 所以CCR提供了通過所謂的通道交換消息的原語。進程可以等待消息到達一個頻道,多個頻道或多個頻道中的任何一個等等。這是協調並行進程的特殊範例,運行良好。另請注意,這不是免費的 - 你必須單獨購買。
TPL提供基元和基礎結構,以便半自動地並行運算計算或算法。最明顯的原語之一是並行for循環 - 看起來有點像for循環,但試圖並行執行循環。
所以,如果你有一堆你想在高於使用共享狀態和鎖定的級別上進行協調,請使用CCR。如果您希望在多核計算機上高效運行計算密集型進程,請使用TPL。
schelfthout:自幾天前它已經免費發佈(最終) – Toad 2010-06-05 14:50:36
這不是一種任何一種情況。 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() + " ");
});
}
));
}
}
}
讀二郎山併發,CCR是Erlang的併發拷貝,典型的微軟的方式。任務parellel是多線程的 – mamu 2010-10-14 04:58:58