سؤال

تحتوي Microsoft على موافقتين مختلفتين على الأقل لتحسين الدعم للعمليات المتزامنة.

1) هو وقت تشغيل تنسيق التزامن (CCR) وهو جزء من Microsoft Robotics Studio و مجموعة أدوات CCR & DSS

2) مكتبة Paralell المهمة (تلا) (جزء من .NET 4.0 والآن في الإصدار بيتا 1)

أود أن أعرف ما إذا كان أي شخص لديه خبرة مع هذين البرنامجين المختلفة من البرامج ويقارنهم وتناقضهم؟

هل كانت مفيدة؟

المحلول

على حد سواء، كلا الأطر والأطر لديها أهداف متكاملة ولكن مختلفة.

تقدم لجنة الرقابة المصورة البدائية للتنسيق في العمليات المتزامنة. التنسيق هو الغراء الذي يجعل مجموعة من العمليات تعمل ككل - وبالتالي يقدم CCR البدائيين لتبادل الرسائل من خلال ما يسمى القنوات. يمكن للعمليات الانتظار حتى تصل رسالة إلى قناة، أو عدد من القنوات، أو أي واحد من عدد من القنوات وما إلى ذلك. هذا نموذج معين لتنسيق العمليات المتزامنة التي تعمل بشكل جيد. الملاحظة أيضا أنها ليست مجانية - عليك أن تشتري إذا من Microsoft بشكل منفصل.

يوفر TPL البدائيات والبنية التحتية ل موازية الحسابات أو الخوارزميات نصف تلقائيا. أحد أكثر البدائيات وضوحا موجودة بالتوازي للحلقة - يبدو نوعا مثل حلقة واحدة ولكن يحاول تنفيذ الحلقة بالتوازي.

لذلك، إذا كان لديك مجموعة من العملية التي ترغب في تنسيقها على مستوى أعلى من استخدام الحالة والأقفال المشتركة، فاستخدم CCR. إذا كان لديك عملية كثيفة حسابية ترغب في تشغيلها بكفاءة على آلة متعددة النواة، فاستخدم TPL.

نصائح أخرى

انها ليست إما / أو سيناريو. CCR هي مكتبة تدعم أنماط البرمجة معينة. يمكنك التجزع CCR و TPL Code مثل هذا، إليك موازية. في الداخل من مندوب تلقي:

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() + " ");
                    });
                }
            ));
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top