.NET multithreading e processori quad core

3

Ho un'applicazione a thread singolo che gira su una macchina con un processore quad core. Le attività pianificate che eseguono i moduli VB.NET sono troppo lente.

Sono nuovo nel multi-threading e nel calcolo parallelo. Se si dispone di un'applicazione a thread singolo che viene eseguita su un server con un processore multi core, l'applicazione utilizza sempre solo uno dei processori? Cosa succede se hai più attività pianificate e più istanze sono in memoria contemporaneamente?

Ho letto questa domanda su Stackoverflow: link , ma non sono ancora chiaro.

    
posta w0051977 19.09.2012 - 19:51
fonte

4 risposte

3

Un processo avrà un thread, a meno che tu non lo dica diversamente. Due processi hanno quindi due thread totali. Ogni core su un processore può eseguire un thread alla volta. Quindi, se hai un processore con 2 core (o 2 processori con 1 core ciascuno):

  • Se hai un processo con un solo thread, verrà eseguito sempre uno dei core alla volta (nota che può passare tra core, ma non userà mai entrambi allo stesso tempo).

  • Se hai due processi con un thread ciascuno, possono (ma potrebbero non esserlo) entrambi eseguire contemporaneamente (su diversi core e / o processori diversi).

  • Se hai un processo con due thread, entrambi i thread possono (ma potrebbero non essere) eseguiti contemporaneamente (su core differenti e / o processori diversi).

risposta data 19.09.2012 - 20:03
fonte
1

"Se si dispone di un'applicazione a thread singolo che viene eseguita su un server con un processore multi core, l'applicazione utilizza sempre solo uno dei processori?" Non si indica quanti processori ha il server, quindi potrebbe essere che ci sia un solo processore ma con più core e quindi solo un processore viene utilizzato come non ci sono altri processori da utilizzare. L'avvertimento qui è di fare attenzione alla differenza tra il numero di core e il numero di processori in quanto c'è qualcosa da dire per quale prospettiva stai facendo la domanda. Ad esempio, un singolo processore quad-core non è lo stesso di 2 processori dual-core e quindi consiglierei cautela nella scelta delle parole in quanto core e processore non sono termini intercambiabili per me.

Se ci sono più istanze in processi diversi, allora dovrebbero essere eseguiti in spazi di indirizzi diversi nella memoria sarebbe la mia ipotesi, ma questo è più che altro del sistema operativo.

Qualcosa da considerare qui è che tipo di moduli stai usando qui: Winform o Webform? Se quest'ultimo, anche se ogni pagina può utilizzare un singolo thread, il pool di applicazioni utilizzato da IIS potrebbe avere più thread e quindi il codice viene eseguito su più core. Se si tratta di un'applicazione Winforms, non conosco la risposta.

L'introduzione di Threading può o no incoraggiare il sistema operativo a utilizzare altri processori, in quanto esiste il concetto di Calcolo simultaneo che può complicare la domanda in quanto può esserci l'apparenza di un'esecuzione parallela. Quindi si potrebbero inserire più thread, ma questo può ancora essere eseguito sullo stesso processore.

    
risposta data 19.09.2012 - 20:02
fonte
1

Un'applicazione single-threaded può essere eseguita solo su un singolo core, ma non utilizza mai completamente un processore. Se esegui lavori concomitanti all'interno di quella applicazione, per ogni thread che crei, può essere assegnato a un core diverso. L'attuale generazione di processori multi-core di Intels tende ad avere anche hyper-threading su di essi. Ad esempio, un quad core con hyper-threading ha 8 core virtuali, (se si visualizza la scheda delle prestazioni del task manager, si vedrà l'utilizzo della CPU diviso in 8 colonne). Ciò significa che Windows eseguirà 8 thread separati allo stesso tempo.

Il percorso più semplice per rendere l'applicazione multi-thread consiste nell'utilizzare Task Parallel Library disponibile per .NET 4 e versioni successive.

    
risposta data 19.09.2012 - 20:25
fonte
1

Questo dipenderà dall'hardware del server, dal sistema operativo e dall'ambiente in cui viene eseguito il codice.

In altre parole, è fino al sistema operativo in cui è programmato un thread . Ci sono dei vantaggi nel mantenere una discussione sullo stesso core, se possibile, in termini di coerenza della cache, ecc. E costringerlo a rimanere sullo stesso core di solito è troppo restrittivo.

Esistono differenze fondamentali nell'approccio per lo sviluppo di applicazioni a thread singolo e multi-thread che devono essere presi in considerazione. Per gli sviluppatori di piattaforme .NET, ecco un articolo davvero valido che spiega gli elementi essenziali di cui essere a conoscenza: Multi-threading in .NET: Introduzione e suggerimenti

Questo post ha punti molto importanti per chiarire la comprensione dei processi di threading .NET.

    
risposta data 19.09.2012 - 20:04
fonte

Leggi altre domande sui tag