¿Por qué "while (verdadero)" sin "Thread.sleep" causa el uso del 100% de la CPU en Linux pero no en Windows?

158

He creado un programa simple en Java:

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

Si ejecuto esto en una máquina Linux, muestra el uso del 100% de la CPU, pero no hace que el sistema operativo parezca lento. Sin embargo, si ejecuto exactamente el mismo código en Windows, solo muestra aproximadamente el 20% de uso de la CPU.

Estoy usando Oracle JRE en Windows y OpenJDK 6 en Linux.

Me pregunto si el planificador de Windows se adelanta a los subprocesos al azar y el de Linux no.

Maniek
fuente
55
Depende de la programación de tareas del sistema operativo.
Subhrajyoti Majumder
52
¿Cuántos núcleos tienes? El administrador de tareas de Windows informa al 100% cuando TODOS los núcleos están ocupados. ¿Su herramienta de Linux hace algo similar, o informa 100% para el trabajo de 1 núcleo, y cuando todos los núcleos están ocupados, lo es 100*N cores %?
gritando el
2
Tengo 4 núcleos y en la herramienta de monitor de sistema de uso de Linux I
Maniek
1
@Quoi No realmente. Si ese programa es todo lo que se está ejecutando, entonces el hilo se ejecutará sin interrupción tanto en Windows como en Linux.
David Heffernan

Respuestas:

387

Por defecto, topen Linux se ejecuta en el llamado modo IRIX, mientras que el Administrador de tareas de Windows no. Digamos que tienes 4 núcleos:

  • Con el modo IRIX activado, 1 núcleo totalmente utilizado es 100% y 4 núcleos son 400%.

  • Con el modo IRIX desactivado, 1 núcleo totalmente utilizado es 25% y 4 núcleos son 100%.

Esto significa que, por defecto, topen Linux mostrará un bucle infinito como ~ 100% y Windows lo mostrará como ~ 25%, y significa exactamente lo mismo.

Puede alternar el modo IRIX mientras topse ejecuta con Shift+ i. Esto hará que los números coincidan.

ese otro chico
fuente
2
Sí, en un i7 '4 + 4' (hyperthreading), un bucle trivial de la CPU sale aproximadamente del 17-18%.
Martin James
¿Por qué el que responde tiene 150UPs todavía su puntaje es de 700 ... es un error TAN? : - /
uday
55
@uDaY, debido a que hay un máximo de 200 repeticiones por día, cualquier voto a favor después de eso no se cuenta, las respuestas aceptadas aún lo serán.
sa_ddam213
3
@thatotherguy ¿Cuándo exactamente presionar shift-I para alternar? Mientras la parte superior se está ejecutando?
Geek