Por que "while (true)" sem "Thread.sleep" causa 100% de uso da CPU no Linux, mas não no Windows?

158

Eu criei um programa simples em java:

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

Se eu executar isso em uma máquina Linux, ele mostra 100% de uso da CPU, mas não faz com que o SO apareça lento. No entanto, se eu executar exatamente o mesmo código no Windows, ele mostrará apenas cerca de 20% de uso da CPU.

Estou usando o Oracle JRE no Windows e o OpenJDK 6 no Linux.

Eu estou querendo saber se o agendador do Windows preempt threads aleatoriamente e Linux não?

Maniek
fonte
5
Depende do agendamento de tarefas do sistema operacional.
Subhrajyoti Majumder
52
quantos núcleos você tem? O gerenciador de tarefas do Windows informa 100% quando TODOS os núcleos estão ocupados. Sua ferramenta linux faz algo semelhante ou informa 100% do valor de 1 núcleo de trabalho e quando todos os núcleos estão ocupados, é 100*N cores %?
yiding
2
Eu tenho 4 núcleos e no linux eu ferramenta de monitor de sistema de uso
Maniek
1
@ Quoi Na verdade não. Se esse programa estiver em execução, o encadeamento será executado sem interrupção no Windows e no Linux.
David Heffernan

Respostas:

387

Por padrão, topno Linux é executado no chamado modo IRIX, enquanto o Windows Task Manager não. Digamos que você tenha 4 núcleos:

  • Com o modo IRIX ativado, 1 núcleo totalmente utilizado é 100% e 4 núcleos são 400%.

  • Com o modo IRIX desativado, 1 núcleo totalmente utilizado é 25% e 4 núcleos são 100%.

Isso significa que, por padrão, topno Linux mostrará um loop infinito como ~ 100% e o Windows mostrará como ~ 25%, e significa exatamente a mesma coisa.

Você pode alternar o modo IRIX enquanto topestiver executando com Shift+ i. Isso fará com que os números correspondam.

aquele outro cara
fonte
2
Sim - em um '4 + 4' i7, (hyperthreading), um loop trivial da CPU sai em cerca de 17 a 18%.
Martin James
Por que o atendedor ainda tem 150UPs, mas sua pontuação é de 700 ... é MUITO bug ?? : - /
uday 30/01
5
@uDaY, como há um máximo de 200 representantes por dia, quaisquer votos positivos depois disso não forem contados, as respostas aceitas ainda serão.
precisa saber é
3
@thatotherguy Quando exatamente apertar shift-I para alternar? Enquanto o topo estiver em execução?
30513 Geek