¿Por qué "while(true)", "sin Hilo.sleep " causa 100% de uso de CPU en Linux pero no en Windows?


He creado un programa simple en java:

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

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

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

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

Author: fouric, 2013-01-29

1 answers

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

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

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

Esto significa que por defecto, {[0] } en Linux mostrará un bucle infinito como ~100% y Windows lo mostrará como ~25%, y significa exactamente lo mismo cosa.

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

 386
Author: that other guy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-05 20:02:23