6

Microsoft は、同時操作のサポートを改善するために、少なくとも 2 つの異なるアプローチを採用しています。

1) Microsoft Robotics Studio およびCCR & DSS Toolkitの一部である Concurrency Coordination Runtime (CCR) です。

2) タスク並列ライブラリ ( TPL ) (.NET 4.0 の一部であり、現在 Beta 1 リリース)

これら 2 つの異なるソフトウェアを使用した経験があり、それらを比較対照できる人がいるかどうかを知りたいです。

4

2 に答える 2

9

概して、両方のフレームワークは補完的ではありますが、異なる目標を持っています。

CCR は、並行プロセスを調整するためのプリミティブを提供します。調整は、一連のプロセスを全体として機能させる接着剤です。そのため、CCR は、いわゆるチャネルを介してメッセージを交換するためのプリミティブを提供します。プロセスは、1 つのチャネル、複数のチャネル、または複数のチャネルのいずれかなどにメッセージが到着するのを待つことができます。これは、うまく機能する並行プロセスの調整のための特定のパラダイムです。また、無料ではないことに注意してください。Microsoft から別途購入する必要があります。

TPL は、計算またはアルゴリズムを半自動的に並列化するためのプリミティブとインフラストラクチャを提供します。最も明白なプリミティブの 1 つは、並列 for ループです。for ループのように見えますが、ループを並列で実行しようとします。

したがって、共有状態とロックを使用するよりも高いレベルで調整したいプロセスがたくさんある場合は、CCR を使用してください。マルチコア マシンで効率的に実行したい計算集約型のプロセスがある場合は、TPL を使用します。

于 2009-04-20T20:21:24.510 に答える
5

それはどちらか/またはシナリオではありません。CCRは、特定のプログラミングパターンをサポートするライブラリです。このようにCCRコードとTPLコードを混在させることができます。これがParallelです。Receiveデリゲートの内部の場合:

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() + " ");
                    });
                }
            ));
        }
    }
}
于 2010-10-21T16:39:08.010 に答える