Processo a thread singolo eseguito su 2 core


2

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?inserisci qui la descrizione dell'immagine


Non importa che un processo medio abbia sempre più di un thread, imposta l'affinità del processo per limitare il processo all'esecuzione di tutti i suoi thread su un core.
ta.speot.is

Risposte:


4

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.


Come sarebbero gestite le risorse? È necessario trasferire la cache L1 tra i core? Perché non viene eseguito solo su un core anziché su 2 core (c'è un vantaggio ... sembra piuttosto il contrario)?
agz,

1) Quali risorse? Potresti espanderlo per essere un po 'più specifico? 2) È lo scheduler nel sistema operativo che decide su quale core verrà eseguito il processo. Di solito quelli cercano di mantenere lo stesso processo sullo stesso core al fine di beneficiare degli hit della cache e delle potenziali funzionalità di turbo boost. 3) La coerenza della cache è gestita dalla CPU stessa sull'architettura x86. Non hai specificato che stai usando x86, ma l'immagine di un task manager suggerisce fortemente la finestra e quindi di solito a x86.
Hennes,

Hai scattato quella foto del taskmanager su una CPU con 2 core fisici e 4 logici?
Hennes,

È un core 2 quad q9650, 4 core fisici e 4 thread
agz

2
Non ho accesso all'origine dell'utilità di pianificazione di Windows o alla sua logica. Quindi non posso rispondere per Windows. Il meglio che posso fare è indovinare . Ad esempio un driver che ha una forte preferenza per il core 0 che ha spinto il battistrada su un altro core. Ma ripeto: Indovina
Hennes il

0

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.


0

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.