2013-09-22 35 views
13

Tôi muốn biết, có bao nhiêu luồng sẽ được sử dụng khi tôi chạy vòng lặp Parallel.For/ForEach.Có bao nhiêu luồng Parallel.For (Foreach) sẽ tạo ra? MaxDegreeOfParallelism mặc định?

Tôi thấy rằng nó có thể được thay đổi bằng tùy chọn MaxDegreeOfParallelism.

MaxDegreeOfParallelism giúp đỡ trên MSDN nói (link):

Theo mặc định, Ví và ForEach sẽ sử dụng tuy nhiên nhiều chủ đề các lên lịch cơ bản cung cấp, vì vậy thay đổi MaxDegreeOfParallelism từ mặc định chỉ giới hạn bao nhiêu nhiệm vụ đồng thời sẽ được dùng.

Nhưng tôi không biết có bao nhiêu chủ đề dựa trên lịch biểu cung cấp.

Tôi làm cách nào để tìm hiểu điều đó?

Tôi có thể kiểm tra nó với vòng lặp có 9999999 chạy, tuy nhiên kiểm tra này sẽ hiển thị số của tôi, chứ không phải quy tắc xác định số đó.

Chỉnh sửa/bổ sung sau:

Tôi googled cho "đồng thời tối đa sheduler", và tôi thấy (tại MSDN - link), mà TashSheduler lớp có MaximumConcurrencyLevel bất động sản, và:

Trả về một số nguyên đại diện cho mức đồng thời tối đa. trình lên lịch mặc định trả về Int32.MaxValue.

Lớp TaskSheduler đó được sử dụng làm "trình lên lịch cơ bản" cho các vòng song song này?

+0

Điều thú vị là nó trả về hằng số '2147483647' .. không phải' int32.MaxValue'. –

Trả lời

13

Theo MSDN:

Scheduler mặc định cho Thư viện Parallel Nhiệm vụ và PLINQ sử dụng .NET Framework ThreadPool phải xếp hàng và thực hiện công việc. Trong Khuôn khổ .NET 4, ThreadPool sử dụng thông tin được cung cấp theo loại System.Threading.Tasks.Task để hỗ trợ hiệu quả tính song song hạt mịn (các đơn vị công việc ngắn ngủi) mà các nhiệm vụ và truy vấn song song thường đại diện.

Nhìn vào documentation của ThreadPool, nó nói:

Có một hồ bơi thread cho mỗi quá trình. Bắt đầu với .NET Framework 4, kích thước mặc định của pool thread cho một quá trình phụ thuộc vào một số yếu tố, chẳng hạn như kích thước của không gian địa chỉ ảo. Một quá trình có thể gọi phương thức GetMaxThreads để xác định số lượng luồng. Số lượng các chủ đề trong nhóm luồng có thể được thay đổi bằng cách sử dụng phương thức SetMaxThreads.