2012-09-16 31 views

Trả lời

10

.NET hỗ trợ tất cả các lõi. Trả lời từ Stehphen Toub trong số MSDN Parallel Extensions Forum:

TPL TaskScheduler mặc định nhắm mục tiêu .NET ThreadPool. Theo mặc định, các hồ bơi được giới hạn trong một processor group duy nhất, và do đó đến 64 lõi. Tuy nhiên, trong .NET 4.5 bạn có thể đặt cờ <Thread_UseAllCpuGroups enabled="true"/>.Khi máy tính của bạn có nhiều nhóm CPU, cho phép phần tử này gây ra thời gian chạy để phân phối luồng được quản lý trên tất cả các nhóm CPU thay vì bị giới hạn chỉ một, và do đó trình lên lịch mặc định có thể nhắm mục tiêu bất kỳ hệ điều hành nào hỗ trợ. (GCCpuGroup cũng phải được bật để cài đặt này có hiệu lực.)

+1

'' không hoạt động trên máy 2s/16c/32T với .net 4.6.2 trên Server 2016. (vâng, chúng tôi đã thiết lập toàn bộ: '') – mbx

2

Theo CLR via C#, 3rd ed., chương 25 Khái niệm cơ bản Chủ đề:

Hôm nay, CLR [...] chỉ có thể sử dụng lên đến 64 lõi khi chạy trên Windows 64-bit. [… M] ứng dụng anaged có thể sử dụng tối đa 32 lõi khi chạy trên phiên bản Windows 32 bit.

Cuốn sách này được viết vào năm 2010, vì vậy nó chứa các thông tin liên quan đến Net 4.0 và Windows Server 2008 R2, nhưng Tôi không nghĩ Net 4.5 thay đổi bất cứ điều gì trong vấn đề này. EDIT: Dường như .Net 4.5 đã thực sự thay đổi điều này, xem câu trả lời của Peter Meinl trích dẫn Stephen Toub.

+0

Tôi đã hỏi câu hỏi của mình sau khi đọc sách bạn đề cập đến nếu mọi thứ có thể đã thay đổi với .NET 4.5. Có vẻ lạ với tôi rằng một khung công tác quan trọng như .NET không cho phép sử dụng toàn bộ số lõi mà hệ điều hành hỗ trợ. –

+0

Tôi nghĩ rằng các máy chủ có hơn 64 lõi vẫn còn rất hiếm và nếu bạn có, bạn có thể quan tâm đến hiệu suất rất nhiều, vì vậy bạn không có khả năng sử dụng .Net. Do đó, tôi nghĩ việc hỗ trợ nhiều lõi hơn không phải là ưu tiên. – svick

+0

Một bo mạch chủ với 32 lõi và 32 GB chi phí ít hơn 2500 €. Có lẽ có một lý do đằng sau không hỗ trợ hơn 64 lõi trong .NET mà tôi không biết. Tôi mới bắt đầu chơi với TPL và cố gắng để có được cảm giác về mọi thứ. –

2

By Eric Lippert (source)

Đối Beta 1 của CLR 4.0, scheduler mặc định cho TPL sẽ là CLR bơi thread

này khoảng có nghĩa là công việc đi vào hàng đợi FIFO và mỗi lõi đều làm giảm một khối lượng công việc. Nói cách khác, bây giờ không có ranh giới trên cố định cho số lõi mà CLR threadpool hỗ trợ. Ranh giới trên này được thực thi bởi các bên khác - hệ điều hành, phần cứng và nền tảng CPU.

Số mặc định của chủ đề trong một hồ bơi (mỗi this answer)

  • 1023 trong Framework 4.0 (32-bit môi trường)
  • 32768 trong Framework 4.0 (64-bit môi trường)
  • 250 mỗi lõi trong Khung 3.5
  • 25 mỗi lõi trong Khung 2.0

về mặt kỹ thuật cho phép nhiều hành động song song trên lõi chuyên dụng.

Lưu ý điều đó không có nghĩa là tại bất kỳ thời điểm cụ thể nào, có nhiều chuỗi trong một nhóm. CLR và OS thường cố gắng giảm dần số lượng các luồng trong một nhóm để giải phóng các tài nguyên không được sử dụng.

+2

Nhưng điều đó không thực sự trả lời bao nhiêu * lõi * có thể được sử dụng bởi tất cả các chủ đề đó. – svick

Các vấn đề liên quan