sourcecode

"thread"가 없는 "while(true)"가 되는 이유는 무엇입니까?sleep'이 원인이 되어 Linux에서는 CPU 사용률이 100%이지만 Windows에서는 그렇지 않으면 Windows에서는 CPU 사용률이 100%가 되지 않습니다.

copyscript 2022. 8. 30. 22:26
반응형

"thread"가 없는 "while(true)"가 되는 이유는 무엇입니까?sleep'이 원인이 되어 Linux에서는 CPU 사용률이 100%이지만 Windows에서는 그렇지 않으면 Windows에서는 CPU 사용률이 100%가 되지 않습니다.

자바에서 간단한 프로그램을 만들었습니다.

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

Linux 머신에서 실행하면 CPU 사용률이 100%로 표시되지만 OS가 느려지는 것은 아닙니다.다만, Windows 로 같은 코드를 실행하면, CPU 사용율이 약 20% 밖에 표시되지 않습니다.

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

Windows 스케줄러는 랜덤으로 스레드를 프리엠프트하지만 Linux 스케줄러는 프리엠프트하지 않습니까?

디폴트로는top는 이른바 IRIX 모드로 실행되지만 Windows 태스크 매니저는 실행하지 않습니다.코어가 4개라고 합시다.

  • IRIX 모드를 켜면 1개의 코어가 100%이고 4개의 코어가 400%입니다.

  • IRIX 모드를 끄면 1개의 코어가 완전히 사용률 25%, 4개의 코어가 100%가 됩니다.

즉, 디폴트로는topLinux 에서는 무한 루프가 ~100%로 표시되고 Windows 에서는 ~25%로 표시됩니다.이는 정확히 같은 것을 의미합니다.

IRIX 모드를 전환할 수 있습니다.top는 +i로 동작하고 있습니다.이렇게 하면 숫자가 일치합니다.

언급URL : https://stackoverflow.com/questions/14579124/why-does-whiletrue-without-thread-sleep-cause-100-cpu-usage-on-linux-but

반응형