Perché "while (true)" senza "Thread.sleep" causa un utilizzo della CPU del 100% su Linux ma non su Windows?


158

Ho creato un semplice programma in Java:

public static void main(String[] args) throws InterruptedException {
    while (true) 
        ;
}

Se lo eseguo su una macchina Linux, mostra un utilizzo della CPU al 100%, ma non fa apparire lento il sistema operativo. Tuttavia, se eseguo esattamente lo stesso codice su Windows, mostra solo circa il 20% di utilizzo della CPU.

Sto usando Oracle JRE su Windows e OpenJDK 6 su Linux.

Mi chiedo se lo scheduler di Windows preveda i thread casualmente e quelli di Linux no?


5
Dipende dalla pianificazione delle attività del sistema operativo.
Subhrajyoti Majumder,

52
quanti core hai? Il task manager di Windows segnala il 100% quando TUTTI i core sono occupati. Il tuo strumento linux fa qualcosa di simile o riporta il 100% per un valore di 1 core e quando tutti i core sono occupati, è 100*N cores %?
urlando il

2
Ho 4 core e su Linux utilizzo lo strumento di monitoraggio del sistema
Maniek,

1
@Quoi Non proprio. Se quel programma è tutto ciò che è in esecuzione, il thread verrà eseguito senza interruzioni su Windows e Linux.
David Heffernan,

Risposte:


387

Per impostazione predefinita, topsu Linux funziona nella cosiddetta modalità IRIX, mentre il Task Manager di Windows no. Supponiamo che tu abbia 4 core:

  • Con la modalità IRIX attiva, 1 core completamente utilizzato è al 100% e 4 core al 400%.

  • Con la modalità IRIX disattivata, 1 core completamente utilizzato è il 25% e 4 core sono il 100%.

Ciò significa che, per impostazione predefinita, topsu Linux mostrerà un ciclo infinito come ~ 100% e Windows lo mostrerà come ~ 25%, e significa esattamente la stessa cosa.

È possibile attivare / disattivare la modalità IRIX mentre topè in esecuzione con Shift+ i. Questo farà corrispondere i numeri.


2
Sì - su un i7 '4 + 4', (hyperthreading), un loop di CPU banale esce a circa il 17-18%.
Martin James,

Perché il risponditore ha 150UP, ma il suo punteggio è di 700 ... è così bug ?? : - /
ud

5
@uDaY, poiché esiste un massimo di 200 ripetizioni al giorno, eventuali voti successivi non conteggiati, le risposte accettate continueranno a essere.
sa_ddam213

3
@thatotherguy Quando premere esattamente Maiusc-I per attivare? Mentre top è in esecuzione?
Geek,
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.