2010-02-25 95 views
31

Microsoft .NET 4.0 giới thiệu các "cải tiến song song" mới cho khung công tác của nó. Tôi tự hỏi sự khác biệt giữa việc tạo ra một ứng dụng sử dụng các hàm System.Threading tiêu chuẩn so với các cải tiến song song mới.Luồng song song với Xử lý song song

Trả lời

36

Có lẽ sự khác biệt quan trọng nhất giữa các phần mở rộng song song và luồng thông thường là luồng điều khiển.

Một chuỗi được tạo bằng cách sử dụng new Thread(...) hoặc ThreadPool.QueueUserWorkItem sẽ chấm dứt tại một thời điểm hoàn toàn không xác định. Nếu bạn viết mã này:

ThreadPool.QueueUserWorkItem(() => 
    { 
     Thread.Sleep(1000); 
     Console.WriteLine("Work Finished"); 
    }); 
Console.WriteLine("Item Queued"); 

Văn bản Item Queued sẽ xuất hiện ngay lập tức, và Work Finished sẽ được in sau khoảng 1 giây chậm trễ.

Mặt khác, nếu bạn viết một cái gì đó tương tự như sử dụng phần mở rộng song song:

Parallel.For(0, 10, i => 
    { 
     Thread.Sleep(1000); 
     Console.WriteLine("Test {0}", i); 
    }); 
Console.WriteLine("Finished"); 

Những gì bạn sẽ thấy trong trường hợp này là một sự chậm trễ 1 giây trước khi bất cứ điều gì xảy ra, sau đó một loạt các "Test" thư theo thứ tự ngẫu nhiên và rồi văn bản Finished.

Nói cách khác, các tác vụ chạy song song không thực sự thay đổi luồng chương trình. Nó sẽ chạy các nhiệm vụ khác nhau trên các luồng khác nhau để chúng có thể được thực thi trên nhiều lõi CPU, để cải thiện thông lượng tổng thể của chương trình, nhưng theo như lập trình viên điển hình, các nhiệm vụ này không thực sự chạy trong nền "như họ sẽ được với một sợi. Bạn không phải thay đổi cấu trúc chương trình của bạn hoặc làm bất cứ điều gì đặc biệt để được thông báo khi công việc hoàn thành. Bạn không có quyền kiểm soát những gì xảy ra bên trong khối song song, nhưng bạn biết rằng khối sẽ không trả lại quyền kiểm soát cho đến khi tất cả các tác vụ song song hoàn tất.

Mặc dù tiện ích mở rộng song song là tuyệt vời cho điều này, nó đề cập đến PX không sử dụng bất cứ điều gì khi bạn thực sự cần để chạy tác vụ ở chế độ nền, chẳng hạn như triển khai lập lịch hoặc giao cho một chuỗi công nhân để giữ một giao diện người dùng đáp ứng. Bạn vẫn cần sử dụng các thành phần hoặc các thành phần không đồng bộ cho các chủ đề đó.

+0

cũng khi bạn đợi tác vụ, bạn đợi tất cả các tác vụ con không giống chủ đề. Lỗi handerling là tốt hơn rất nhiều với nhiệm vụ sau đó chủ đề. –

-2

Parallel Processing chỉ là một số giao diện ưa thích cho đề tự động tạo ra. Nó dễ dàng hơn để sử dụng phần mở rộng xử lý song song cho hầu hết các nhiệm vụ.

1

Khuôn khổ song song sử dụng mô hình luồng .NET bên dưới mà lần lượt xây dựng trên mô hình luồng Windows. Tuy nhiên, rất nhiều tối ưu hóa đã được thực hiện trong khuôn khổ chung để làm cho thư viện song song hiệu quả hơn.

This blog có các chi tiết bổ sung.