Tôi hiểu rằng TPL mới (Thư viện song song nhiệm vụ) đã thực hiện Parallel.ForEach() sao cho nó hoạt động với "thuyết trình song song". Có nghĩa là, nó không đảm bảo rằng các đại biểu của bạn sẽ chạy trong nhiều luồng, nhưng thay vào đó nó kiểm tra xem nền tảng máy chủ có nhiều lõi hay không, và nếu đúng, chỉ sau đó nó phân phối công việc trên các lõi (về cơ bản 1 luồng trên mỗi lõi) ..NET 4 ... Parallel.ForEach() question
Nếu hệ thống lưu trữ không có nhiều lõi (khó tìm và khó tìm thấy một máy tính như vậy) thì nó sẽ chạy mã của bạn theo thứ tự giống như vòng lặp foreach thông thường. Khá thú vị, thẳng thắn.
Thông thường tôi sẽ làm một cái gì đó như sau để đặt hoạt động dài chạy của tôi trên một sợi nền từ ThreadPool:
ThreadPool.QueueUserWorkItem (mới WaitCallback (targetMethod), mới Object2PassIn());
Trong trường hợp máy tính chủ chỉ có một lõi đơn, Parallel.ForEach() của TPL tự động đặt lệnh gọi trên một chuỗi nền? Hoặc, tôi có nên gọi manaully bất kỳ cuộc gọi TPL nào từ một nền tảng để nếu tôi đang thực hiện từ một máy tính lõi đơn ít nhất là logic đó sẽ được tắt của thread dispatching của GUI?
Mối quan tâm của tôi là nếu tôi rời TPL phụ trách tất cả điều này, tôi muốn đảm bảo nếu nó xác định đó là một hộp lõi duy nhất mà nó vẫn khắc phục mã bên trong vòng lặp Parallel.ForEach() trên một chuỗi nền như tôi đã làm, để không chặn GUI của tôi.
Cảm ơn mọi suy nghĩ hoặc lời khuyên mà bạn có thể có ...
Chỉ cần theo dõi nhanh về điều này: TPL Rocks! Không thể vượt qua nhanh hơn tôi có thể tạo ra nhiều ứng dụng khác nhau chỉ với một vài điều chỉnh nhỏ bằng cách sử dụng các cuộc gọi TPL so với giá vé "tiêu chuẩn". Tôi đang xem thời gian xử lý trên các mặt hàng khác nhau được cắt giảm lên tới 80%. MS thực sự gõ nó ra khỏi công viên trên này - những người làm việc tuyệt vời. – BonanzaDriver