Microsoft CCR против параллельной библиотеки задач

StackOverflow https://stackoverflow.com/questions/750104

  •  09-09-2019
  •  | 
  •  

Вопрос

У Microsoft есть как минимум два разных подхода к улучшению поддержки параллельных операций.

1) Является ли среда выполнения координации параллелизма (CCR), которая является частью Microsoft Robotics Studio и Инструментарий CCR и DSS

2) Библиотека параллельных задач (ВГЗ) (Часть .NET 4.0 и теперь в бета-версии 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() + " ");
                    });
                }
            ));
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top