2009-04-15 19 views
6

Microsoft có ít nhất hai sự chấp thuận khác nhau để cải thiện hỗ trợ cho các hoạt động đồng thời.CCR của Microsoft vs Thư viện song song tác vụ

1) Là Concurrency phối Runtime (CCR) là một phần của Microsoft Robotics Studio và CCR & DSS Toolkit

2) công tác song song Thư viện (TPL) (Một phần của .NET 4.0 và bây giờ trong Beta 1 phát hành)

Tôi muốn biết liệu có ai có kinh nghiệm với hai phần mềm khác nhau này và sẽ so sánh và đối chiếu chúng không?

+0

Đọc đồng thời erlang, ccr là bản sao đồng thời erlang, cách Microsoft thông thường. Nhiệm vụ parellel là đa luồng – mamu

Trả lời

9

Và lớn, cả hai khung đều có mục tiêu bổ sung nhưng khác nhau.

CCR cung cấp các nguyên thủy để điều phối các quá trình đồng thời. Sự phối hợp là keo tạo nên một loạt các quy trình hoạt động như một tổng thể - vì vậy CCR cung cấp các nguyên thủy để trao đổi thông điệp thông qua các kênh được gọi. Các quy trình có thể chờ tin nhắn đến trên kênh hoặc một số kênh hoặc bất kỳ một trong số các kênh và v.v. Đây là một mô hình cụ thể cho sự phối hợp của các quá trình đồng thời hoạt động tốt. Cũng lưu ý rằng nó không phải là miễn phí - bạn phải mua nếu từ Microsoft một cách riêng biệt.

TPL cung cấp các nguyên thủy và cơ sở hạ tầng để parallellize tính toán hoặc thuật toán bán tự động. Một trong những nguyên thủy rõ ràng nhất có song song cho vòng lặp - trông giống như một vòng lặp for nhưng cố gắng thực hiện vòng lặp song song.

Vì vậy, nếu bạn có một loạt quy trình mà bạn muốn phối hợp ở cấp độ cao hơn sử dụng trạng thái chia sẻ và khóa, hãy sử dụng CCR. Nếu bạn có một quá trình tính toán chuyên sâu mà bạn muốn chạy hiệu quả trên một máy đa lõi, hãy sử dụng TPL.

+4

schelfthout: kể từ một vài ngày trước, nó đã được phát hành miễn phí (cuối cùng) – Toad

5

Đây không phải là một trong hai trường hợp. CCR là một thư viện hỗ trợ các mẫu lập trình nhất định. Bạn có thể trộn lẫn mã CCR và TPL như thế này, đây là một bên Parallel.For của một đại biểu Nhận:

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() + " "); 
        }); 
       } 
      )); 
     } 
    } 
}