Sulla mia CPU quad core, sembra che un singolo thread (infinito while loop) venga eseguito contemporaneamente su 2 core. Perchè è questo? Un singolo thread non dovrebbe essere eseguito su un solo core?
Sulla mia CPU quad core, sembra che un singolo thread (infinito while loop) venga eseguito contemporaneamente su 2 core. Perchè è questo? Un singolo thread non dovrebbe essere eseguito su un solo core?
Risposte:
Un singolo battistrada può essere eseguito su tutti i core che hai, ma sarà limitato a un singolo core contemporaneamente.
Pensalo come una conversazione telefonica. Hai un solo telefono * 1 e devi continuare a parlare nel telefono * 2 . Hai quattro persone in ufficio, ognuna in grado di parlare * 3 . Nulla ti impedisce di consegnare il telefono a un'altra persona mentre fai una pausa.
Si noti che c'è solo una persona che parla al telefono contemporaneamente .
* 1 Il telefono è il singolo battistrada.
* 2 Devo continuare a parlare perché scorre all'infinito.
* 3 Le quattro persone sono spesso. i quattro core.
Nel tuo screenshot vedo non due, ma 4 thread che usano 4 core in perfetta armonia, con un paio di core che usano la CPU più dell'altra coppia, ma gli alti e i bassi di tutti e 4 i core sono più o meno sincronizzati con il segmenti dello stesso tempo.
Questo non assomiglia affatto a un processo a thread singolo, ma piuttosto a un processo a 4 thread. Ciò richiede un esame più approfondito.
Lo strumento da utilizzare è Process Explorer . Dopo averlo avviato, è possibile fare clic con il pulsante destro del mouse sulle intestazioni delle colonne e selezionare più colonne, se necessario.
Una volta individuato il processo che utilizza queste CPU, è possibile fare doppio clic su di esso e scegliere la scheda Thread per vedere quanti thread ha e cosa stanno facendo (quali chiamate di sistema usano).
Se il processo è solo svchost.exe, è un servizio di sistema che può essere identificato. Quello che molto probabilmente utilizzerà pesantemente la CPU è Windows Search.
Quella visualizzazione nei tuoi post ti mostra quanta attività sta succedendo per ciascun core ma non ti dice nulla su quali processi / thread sono in esecuzione su quale core.
Sospetto che man mano che il tuo programma a thread singolo ottiene il suo "intervallo di tempo", il sistema operativo lo esegue su un core per metà del tempo e un altro core per l'altra metà del tempo. Forse gira anche sugli altri core in una piccola parte del tempo.
Come ciclo infinito sta usando il core completamente per la durata del suo intervallo di tempo, ma ogni incremento di tempo dell'attività del core (nel Task Manager) rappresenterà MOLTO PIÙ della durata dei singoli intervalli di tempo.
Per ulteriori informazioni su ciò che sta succedendo, passare alla scheda Processi sul Task Manager. Nel menu Visualizza, fai clic su Seleziona colonne, quindi seleziona la colonna "Discussioni". Quindi nella colonna Nome immagine trova il tuo processo. Conferma che si tratta di un singolo thread.
Dato che mi siedo qui con non tanto "carico" sulla mia scatola XP ci sono 662 thread in esecuzione. Il mio antivirus esegue 78 thread, Firefox esegue 45 thread, Dropbox ne esegue 33. Winamp non sta riproducendo nulla in questo momento e sta ancora eseguendo 17 thread. Qualsiasi incremento nella visualizzazione Task Manager avrebbe potuto avere tutti quei thread su qualsiasi core.