2012-09-16 12 views

risposta

10

.NET supporta tutti i core. Risposta da Stehphen Toub nel MSDN Parallel Extensions Forum:

L'impostazione predefinita TPL TaskScheduler obiettivi del .NET ThreadPool. Per impostazione predefinita, il pool è limitato a un singolo processor group e quindi a 64 core. Tuttavia, in .NET 4.5 è possibile impostare il flag <Thread_UseAllCpuGroups enabled="true"/>.Quando il tuo computer ha più gruppi di CPU, l'abilitazione di questo elemento fa sì che il runtime distribuisca thread gestiti su tutti i gruppi di CPU anziché essere limitato a uno solo, e quindi lo scheduler di default può indirizzare qualsiasi supporto del sistema operativo. (GCCpuGroup deve essere abilitato affinché questa impostazione abbia effetto.)

+1

'' non funziona per noi su una macchina 2s/16c/32T con .net 4.6.2 su Server 2016. (sì, abbiamo eseguito l'intera configurazione: '') – mbx

2

Secondo CLR via C#, 3rd ed., Capitolo 25 Nozioni di base Discussione:

Oggi, il CLR [...] possono utilizzare solo fino a 64 core se in esecuzione su Windows a 64 bit. Le applicazioni [... M] inanimate possono utilizzare fino a 32 core quando sono in esecuzione su una versione a 32 bit di Windows.

Il libro è stato scritto nel 2010, in modo che contenga le informazioni rilevanti per .Net 4.0 e Windows Server 2008 R2, ma non credo .Net 4.5 è cambiato nulla in questo senso. EDIT: Sembra che .Net 4.5 abbia effettivamente cambiato questo, vedere la risposta di Peter Meinl citando Stephen Toub.

+0

Ho posto la mia domanda dopo aver letto il libro che hai menzionato chiedendo se le cose potrebbero essere cambiate con .NET 4.5. Mi sembra strano che un framework importante come .NET non consenta di utilizzare il numero completo di core supportati dal sistema operativo. –

+0

Penso che i server con più di 64 core siano ancora molto rari e se ne avete uno, probabilmente vi interessano molto le prestazioni, quindi non è probabile che usiate .Net. Per questo motivo, ritengo che supportare più core non fosse una priorità. – svick

+0

Una scheda madre con 32 core e 32 GB costa meno di 2500 €. Forse c'è una logica dietro non supportare più di 64 core in .NET di cui non sono a conoscenza. Ho appena iniziato a giocare con TPL e cerco di provare qualcosa per le cose. –

2

By Eric Lippert (source)

Per Beta 1 di CLR 4.0, lo scheduler di default per TPL sarà la CLR filo piscina

Questo circa significa che il il lavoro entra in una coda FIFO e ogni core rimuove un elemento del carico di lavoro. In altre parole, ora non esiste un limite superiore fisso per il numero di core supportato dal threadpool CLR. Questo limite superiore viene applicato da altre parti: piattaforma SO, hardware e CPU.

Il numero predefinito di thread in una piscina (per this answer)

  • 1023 a Framework 4.0 (ambiente a 32-bit)
  • 32768 a Framework 4.0 (ambiente a 64-bit)
  • 250 per core nel quadro 3,5
  • 25 per core nel quadro 2,0

Quale tecnicamente consente numerose esecuzioni parallele su core dedicati.

Nota non significa che in un dato momento di tempo ci sono molti thread in una piscina. CLR e OS in genere cercano di ridurre lentamente il numero di thread in un pool per rilasciare le risorse che non vengono utilizzate.

+2

Ma questo in realtà non risponde quanti * core * possono essere usati da tutti quei thread. – svick

Problemi correlati