2014-12-19 10 views
5

Sto sviluppando una singola applicazione filettato su una macchina 8 CPU e quando un'operazione pesante accade l'utilizzo della CPU appare in questo modo:Does una singola applicazione eseguita filettato sulla sola CPU

enter image description here

fa il. NET framework ha qualche possibilità di dividere il lavoro di quel singolo thread (automaticamente) nelle altre CPU?

+0

Che tipo di applicazione è? console, WPF, WinForms ...? –

+0

Sai che CPU e core sono diversi, giusto? Suppongo che tu abbia 1 CPU con 8 core o 2 CPU con 4 core non 8 CPU. – deathismyfriend

+0

@ThomasLevesque, importa? – mhs

risposta

1

Il garbage collector .NET verrà eseguito su un altro thread, la GUI verrà eseguita se si sta facendo WinForms/WPF e il sistema operativo eseguirà tutti i tipi di lavoro in altri thread per consentire all'app con un singolo thread di essere eseguita più rapidamente.

1

Un'applicazione con un singolo thread viene eseguita solo su un core della CPU, quindi il modo in cui funziona è quando si hanno più CPU e si ottengono più core rendendo il PC più potente. L'unico utilizzo di un core su tutte le CPU.

-3

No, verrà sempre eseguito in un processore/core e potrebbe variare in base allo scheduler.

È inoltre possibile utilizzare async and await e possono aiutare con la fluidità dell'applicazione.

Hai guardato in Task, è un modo molto semplice di fili che creano

Task.Run(() => 
{ 
    // Do something that will take a long time 
    Thread.Sleep(10000); 
}); 
+2

Questo è completamente oltre il punto ; non è affatto ciò che l'OP chiedeva. –

+1

Mi piace quando le persone non votano per votare qualcosa che in realtà aiuta, anche se non è una risposta completa, le altre risposte spiegano semplicemente quale è il comportamento previsto (ma non è stato votato) e non risponde a tutte le 2 domande precedenti. – Oakcool

+5

L'OP chiede se una app a thread singolo viene eseguita su una singola CPU; la tua risposta mostra come eseguire un'operazione su un altro thread. Non vedo come questo risponda alla domanda dell'OP ... –

2

Anche un processo con un solo filo può o non può sempre correre che un thread sulla stessa CPU. Il totale L'utilizzo della CPU per quel processo non può superare il 100% di un singolo core, ovviamente. Ma quel 100% può essere distribuito su tanti core quanti sono sulla macchina. Quindi potresti vedere per es. 50% di utilizzo su due core diversi invece del 100% su uno solo, 25% su quattro core diversi, ecc.

6

Non è garantito che qualsiasi thread singolo verrà eseguito sempre sullo stesso core. Ma è garantito che verrà eseguito solo su un core allo stesso tempo. Ma può funzionare su un core fino all'interruttore di contesto, e riprendere dopo l'interruttore di contesto su un altro core. Ogni intervallo temporale, il tuo thread, può essere assegnato su un altro core.

5

Un'applicazione a thread singolo viene eseguita su una sola CPU?

Come altri hanno notato, non necessariamente. Tuttavia, un determinato thread verrà eseguito solo su un core alla volta.

Il framework .net ha qualche possibilità di dividere il lavoro nelle altre CPU?

Sì. .NET ha il Parallel class and Parallel LINQ. Si noti che è necessario suddividere il lavoro da soli (in piccoli pezzi), quindi .NET Framework gestirà il bilanciamento del lavoro tra più thread automaticamente.

-1

So che questo è un thread vecchio, ma sono arrivato qui con lo stesso problema e una causa/soluzione diversa.

Se si avvia il programma tramite Visual Studio Debugger (VS2012 qui), sembra che i thread siano associati a un singolo core. Per poter utilizzare tutti i core disponibili, ho dovuto avviarlo direttamente dall'eseguibile o da un prompt di cmd di Windows.

Può essere molto specifico, ma spero che sia d'aiuto.

Problemi correlati