首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微软的CCR vs任务并行库

微软的CCR vs任务并行库
EN

Stack Overflow用户
提问于 2009-04-15 02:43:52
回答 2查看 4.4K关注 0票数 6

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

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

2)任务并行库(TPL) ( .NET 4.0的一部分,现在是Beta1版本)

我想知道是否有人有使用这两个不同软件的经验,并对它们进行比较和对比?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-20 20:21:25

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

CCR提供了用于协调并发进程的原语。协调是使一系列流程作为一个整体工作的粘合剂-因此CCR提供了通过所谓的通道交换消息的原语。进程可以等待消息到达某个通道、多个通道或多个通道中的任何一个通道,等等。这是一个协调并发进程的特殊范例,效果很好。还要注意的是,它不是免费的-你必须单独从微软购买if。

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

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

票数 9
EN

Stack Overflow用户

发布于 2010-10-22 00:39:08

这不是非此即彼的情况。CCR是一个支持某些编程模式的库。你可以像这样混合使用CCR和TPL代码,这是一个接收委托中的Parallel.For:

代码语言:javascript
复制
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() + " ");
                    });
                }
            ));
        }
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/750104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档