[java] “Thread.sleep”이없는“while (true)”가 Linux에서 100 % CPU 사용을 야기하지만 Windows에서는 왜 발생하지 않습니까?

Java로 간단한 프로그램을 만들었습니다.

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

Linux 컴퓨터에서 이것을 실행하면 100 % CPU 사용량이 표시되지만 OS가 느리게 나타나지는 않습니다. 그러나 Windows에서 정확히 동일한 코드를 실행하면 CPU 사용률이 약 20 %에 불과합니다.

Windows에서 Oracle JRE를 사용하고 Linux에서 OpenJDK 6을 사용하고 있습니다.

Windows 스케줄러가 스레드를 무작위로 선점하고 Linux가 아닌지 궁금합니다.



답변

기본적 top으로 Linux에서는 Windows 작업 관리자가 아닌 소위 IRIX 모드로 실행됩니다. 코어가 4 개 있다고 가정 해 봅시다.

  • IRIX 모드가 켜져 있으면 1 개의 완전히 활용 된 코어가 100 %이고 4 개의 코어가 400 %입니다.

  • IRIX 모드를 끄면 완전히 활용 된 1 개의 코어가 25 %이고 4 개의 코어가 100 %입니다.

이것은 기본적 top으로 Linux에서 ~ 100 %로 무한 루프를 표시하고 Windows는 ~ 25 %로 표시하며 정확히 동일한 것을 의미합니다.

+ top로 실행중인 동안 IRIX 모드를 전환 할 수 있습니다 . 숫자가 일치하게됩니다.Shifti


답변