Microsoft 至少有两种不同的方法来改进对并发操作的支持。
1) 是并发协调运行时 (CCR),它是 Microsoft Robotics Studio 和CCR & DSS Toolkit的一部分
2) 任务并行库 ( TPL )(.NET 4.0 的一部分,现在处于 Beta 1 版本中)
我想知道是否有人对这两种不同的软件有经验并会比较和对比它们?
Microsoft 至少有两种不同的方法来改进对并发操作的支持。
1) 是并发协调运行时 (CCR),它是 Microsoft Robotics Studio 和CCR & DSS Toolkit的一部分
2) 任务并行库 ( TPL )(.NET 4.0 的一部分,现在处于 Beta 1 版本中)
我想知道是否有人对这两种不同的软件有经验并会比较和对比它们?
总的来说,这两个框架具有互补但不同的目标。
CCR 提供了用于协调并发进程的原语。协调是使一堆进程作为一个整体工作的粘合剂——因此 CCR 提供了通过所谓的通道交换消息的原语。进程可以等待消息到达一个通道,或多个通道,或多个通道中的任何一个,等等。这是协调运行良好的并发进程的特殊范例。另请注意,它不是免费的 - 如果从 Microsoft 单独购买,您必须购买。
TPL 提供原语和基础设施以半自动地并行化计算或算法。最明显的原语之一是并行 for 循环 - 看起来有点像 for 循环,但尝试并行执行循环。
因此,如果您有一堆进程想要在比使用共享状态和锁更高的级别上进行协调,请使用 CCR。如果您希望在多核机器上高效运行计算密集型进程,请使用 TPL。
这不是一个非此即彼的场景。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() + " ");
});
}
));
}
}
}