Sto osservando il mio utilizzo percentuale della CPU da un processo. In che modo un processo utilizza solo il 50% di CPU? Un processo non utilizza il 100%, quindi lo 0%, quindi il 100%? Non è come ogni altra istruzione è un programma diverso.
Sto osservando il mio utilizzo percentuale della CPU da un processo. In che modo un processo utilizza solo il 50% di CPU? Un processo non utilizza il 100%, quindi lo 0%, quindi il 100%? Non è come ogni altra istruzione è un programma diverso.
Risposte:
I sondaggi ammontano a circa una volta al secondo. Stai guardando quanto dell'ultimo secondo ha usato.
Se vedi una cpu seduta al 50% per un po ', quello che sta probabilmente succedendo è che sta usando il 100% di una cpu in un sistema a doppia cpu.
Tecnicamente hai ragione. In qualsiasi momento, la CPU viene utilizzata o non utilizzata. Ma visualizzarlo in un grafico non sarebbe molto utile, quindi il grafico sta calcolando la media dell'utilizzo della CPU per un certo periodo di tempo, probabilmente ogni secondo.
Il sistema operativo pianifica il processo per un determinato periodo di tempo. Quindi, se il processo è programmato per (diciamo) 1 ms su 10ms, utilizzerà il 10% di CPU.
È un po 'controintuitivo, poiché (in un sistema a thread singolo e CPU singola), il processo è in esecuzione o non in esecuzione. cioè sta usando il 100% o lo 0%. La percentuale visualizzata viene misurata in una finestra temporale ed è una misura del sistema operativo che assegna intervalli di tempo al processo da eseguire.
Si noti che il processo non contribuirà a questo se si accede all'I / O. Quindi, se stai facendo un calcolo enorme, registrerai il 100% (supponendo che nient'altro funzioni). Se poi attendi un pacchetto di rete / accesso al disco ecc., La cifra della CPU diminuirà, nonostante il processo sia ancora in esecuzione.
A un livello molto basso, hai praticamente ragione. In un dato istante, il processore sta eseguendo un'istruzione per un determinato processo o non lo è.
Ma il tuo sistema operativo si trova tra i tuoi processi e il processore, facendoli condividere il tempo. La percentuale che vedi è la percentuale del tempo di elaborazione recente che il sistema operativo ha concesso quel processo.
Si basa sul tempo medio. Nonostante tutti i thread possano avere lo stesso pacchetto di tempo della CPU (in base alla priorità), i thread possono semplicemente dire "grazie ma sono inattivo" e passare al thread successivo. Ecco perché i programmi non utilizzano sempre lo stesso% di tempo e la maggior parte dei programmi consuma lo 0% di CPU, mentre i programmi che richiedono davvero CPU possono impiegare quasi il 100% del tempo per sé.
Perché raggiunge il 50%? Probabilmente hai due core CPU e ne usa solo uno.
O, come suggerito, sta usando l'hyperthreading, ma non so come si comporti esattamente.
L'utilizzo del sistema viene campionato e mediato, che è l'unica cosa sensata da fare.
Ad esempio un record di quanto tempo viene conservato un processo / thread durante 1 secondo. Se ha speso 1 secondo sulla CPU, questo è 100% CPU (o 50% se hai 2 CPU e così via), se ha speso 100ms pari al 10% di utilizzo della CPU.