2009-07-02 22 views
5

Mi è stato assegnato il compito di scrivere un servizio ad alta prestazione e alta disponibilità che verrà eseguito su una scatola multicore.Supporto .NET Framework per hardware multicore

Devo utilizzare Task Parellel Library per in realtà sfruttare un server multicore o il servizio verrà eseguito automaticamente più rapidamente se lancio più hardware (core) su di esso? Il framework .NET fornisce la magia per me sotto le coperte?

Come corollario, ci saranno miglioramenti delle prestazioni aggiornando il server con più core (mantenendo le specifiche di ogni singolo core lo stesso) per le applicazioni .NET che non usano TPL?

Come ho capito (leggendo il libro di Joe Duffy e i suoi blog), è davvero necessario programmare per il multicore. La mia conclusione è esatta?

risposta

7

È difficile rispondere con precisione poiché l'elaborazione parallela non è un problema generico. Avrai bisogno di analizzare il tuo progetto per trovare luoghi in cui puoi sfruttare l'elaborazione parallela.

Se l'applicazione può essere facilmente suddivisa in attività concrete indipendenti, l'elaborazione parallela migliorerà sicuramente. Se è di natura prevalentemente seriale, più core/thread non saranno di alcun aiuto.

Se si è determinato che le attività parallele rappresentano il nucleo del processo, una libreria parallela può aiutare a eseguire le attività di base e rendere più facile l'inserimento corretto.

+0

Grazie Paul. La mia applicazione avrà sicuramente una certa quantità di parallelismo e l'applicazione sarà multithread. La creazione di thread farà leva sull'hardware multicore? Il framework (o il sistema operativo?) Decide se può (o dovrebbe) eseguire un thread su un core differente o devo programmarlo esplicitamente? – Sprash

+1

Basta usare i thread. Il sistema operativo si occuperà di sfruttare i core. ** questa è una risposta troppo semplificata. Se stai per affrontare un grande progetto come questo, vale la pena leggere "Concurrent Programming on Windows" http://www.amazon.com/Concurrent-Programming-Windows-Microsoft-Development/dp/032143482X/ref=sr_1_1?ie = UTF8 & s = books & qid = 1246579844 & sr = 8-1 –

3

Dai uno sguardo a PLinq che arriverà in .Net 4.0. Vi fornirà molte capacità di elaborazione parallele senza la necessità di gestire algoritmi di carico/compito.

+0

Sì, aspetto con impazienza PLinq e .NET 4.0. Hanno fatto un lavoro piuttosto esteso in questo settore. Purtroppo non posso rischiare la versione alpha del framework per la produzione – Sprash

1

Un programma deve avere diversi percorsi di esecuzione per sfruttare più di 1 core/processore. In genere ciò avviene eseguendo più di 1 thread, poiché l'unico modo per la maggior parte del sistema operativo di fornire più del percorso di esecuzione è eseguire diversi processi (eseguibili) o più thread all'interno di un processo.

Esistono diverse astrazioni di alto livello incorporate nei linguaggi moderni per gestire più facilmente ciò che è essenzialmente multi-threading, ma è meglio imparare prima le basi; Threads

+0

Sì, la mia applicazione è sicuramente multi-threaded. Solo l'atto di creare thread fa leva sull'hardware multi-core? – Sprash

+0

Quando si riesce a dividere il codice che si desidera eseguire, da eseguire in thread multipli, allora sì - il sistema operativo si occuperà di eseguire i thread su diversi core. Naturalmente, il multithreading deve essere fatto con molta attenzione, non si vuole finire con le condifizioni della gara, i deadlock, l'inconsistenza dei dati, ecc. – nos