Khi các bộ vi xử lý đa nhân ngày càng trở nên phổ biến hơn, tôi nghĩ tôi sẽ quen thuộc với cách viết mã để tận dụng chúng. Tôi là nhà phát triển .NET và không chắc chắn nên bắt đầu từ đâu (nghiêm túc, tôi có không có đầu mối nơi bắt đầu). Bất kỳ đề xuất?Làm thế nào để viết các ứng dụng .NET sử dụng bộ vi xử lý đa lõi
Trả lời
Lập trình đa lõi về bản chất là lập trình đa luồng. Miễn là ứng dụng của bạn đa luồng, hệ điều hành sẽ xác định lõi nào để chạy luồng nào.
Vì vậy, câu hỏi thực sự của bạn nên là, loại ứng dụng nào sẽ được hưởng lợi từ việc đa luồng? Hãy nghĩ về một ứng dụng như vậy, sau đó khởi tạo nhiều luồng để giải quyết các phần bằng nhau của vấn đề.
Điều này có thể tạo ra một good starting place.
Cách tốt nhất để bắt đầu là lấy CTP mới nhất của khung mở rộng song song và bắt đầu cày qua mã mẫu của chúng.
- Parallel Đội Page: http://msdn.microsoft.com/en-us/concurrency/default.aspx
- mới nhất công bố CTP: http://blogs.msdn.com/somasegar/archive/2008/06/02/june-2008-ctp-parallel-extensions-to-the-net-fx.aspx
Có thể tiện ích mở rộng song song hơi cao hơn một chút. Không nên ăn xin bắt đầu một chút với luồng thủ công, để hiểu tất cả các vấn đề và tìm hiểu cơ bản? –
Tôi có khuynh hướng nghĩ rằng việc học qua những điều này là tốt hơn (do đó câu trả lời của tôi để tìm kiếm thông tin trên .net 4.0). Về cơ bản bạn dành ít thời gian hơn cho cách bạn móc mọi thứ lên, và nhiều thời gian hơn về cách song song ảnh hưởng đến logic.Và nếu không có nguồn nào có sẵn, bạn có thể nhìn trộm với phản xạ :) – eglasius
Hãy tìm thông tin về các .net 4.0. Nó sẽ thêm các cấu trúc khác nhau cho nó.
Đọc trên mô hình lập trình không đồng bộ .NET sử dụng. Nghiên cứu mô hình BeginXXX và EnxXXX cho phép các đại biểu thực hiện trong threadpool.
Tất cả các lớp Dòng đều có phương thức BeingXXX, EndXXX (ví dụ: BeginRead, EndRead) cho phép bạn thực hiện IO không đồng bộ. Nếu bạn đang làm việc trên một cái gì đó mà rất nhiều IO dựa bạn sẽ muốn sử dụng các phương pháp này để tăng tính song song.
"Đọc tiếp ..." Tôi lấy nó, bạn có hiểu biết về các mô hình này. Bạn có bất kỳ tài liệu nào để gợi ý tôi bắt đầu không? CẢM ƠN! –
Hãy xem http://msdn.microsoft.com/en-us/magazine/cc163467.aspx Bất cứ điều gì bởi Jeffrey Richter về chủ đề này là một bài đọc tốt. Ngoài ra, tìm kiếm các bài viết của Joe Duffy, chẳng hạn như http://msdn.microsoft.com/en-us/magazine/cc163467.aspx Anh ấy cũng có một cuốn sách hay về đa luồng. – Sean
Tôi không giới thiệu sách thường xuyên hơn nữa, nhưng Joe Duffy's Concurrent Programming on Windows chỉ đơn giản là không thể thay thế.
Chỉ cần tách dự án của bạn thành các chủ đề khác nhau để thực hiện một chức năng cụ thể sẽ cho phép bạn tận dụng nhiều lõi. Hệ điều hành xử lý việc lập lịch trình các luồng khác nhau tới lõi bộ vi xử lý có sẵn nhất.
Giống như JaredPar, phần mở rộng song song khá tốt. Tôi đã chơi với họ một chút và họ rất dễ sử dụng và thêm hiệu suất.
Các cấu trúc tôi thích rất nhiều là Parallel.ForEach() và PLinq.
Parallel.ForEach tương tự như chức năng ForEach (ủy nhiệm) mà bạn có trong bộ sưu tập DotNet 2.0. Phải mất một đại biểu hành động và chạy nó song song.
Plinq cho phép bạn thực hiện bất kỳ truy vấn LINQ bình thường nào theo kiểu song song bằng cách thêm .AsParallel() vào cuối truy vấn.
Kiểm tra các liên kết Jared được đăng để biết thêm thông tin.
Để bắt đầu, tôi nghĩ rằng tôi sẽ viết một cái gì đó mà quay ra bốn chủ đề (tôi có một máy quad-core). Mỗi luồng sẽ thực thi một ứng dụng giao diện điều khiển riêng biệt, thực hiện một số phép tính cường độ cao trong một hoặc hai phút (để tăng mức sử dụng CPU). Tôi nên sử dụng mức sử dụng CPU 100% trong trường hợp này, đúng không? –
Điều đó khá chính xác. –
Cảm ơn bạn rất nhiều vì đã giúp đỡ! Tôi có một sự hiểu biết khá tốt về điều này ngay bây giờ. Nó có ý nghĩa rằng chỉ có một số loại ứng dụng sẽ xem xét 4 lõi cần được nhẹ. –