programacion - libro de java pdf 2018
¿Por qué "while(true)" sin "Thread.sleep" causa 100% de uso de CPU en Linux pero no en Windows? (1)
De forma predeterminada, la top
de Linux se ejecuta en el denominado modo IRIX, mientras que el Administrador de tareas de Windows no. Digamos que tienes 4 núcleos:
Con el modo IRIX encendido, 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, de forma predeterminada, la top
de Linux mostrará un bucle infinito como ~ 100% y Windows lo mostrará como ~ 25%, y significa exactamente lo mismo.
Puede alternar el modo IRIX mientras top
está ejecutando con Shift + i . Esto hará que los números coincidan.
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 100% de uso de CPU, pero no hace que el sistema operativo parezca lento. Sin embargo, si ejecuto exactamente el mismo código en Windows, solo muestra un 20% de uso de la CPU.
Estoy usando Oracle JRE en Windows y OpenJDK 6 en Linux.
Me pregunto si el programador de Windows se anticipa a los hilos aleatoriamente y Linux no.