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


158

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가 아닌지 궁금합니다.


5
운영 체제 작업 예약에 따라 다릅니다.
Subhrajyoti Majumder

52
코어가 몇 개입니까? 모든 코어가 사용중인 경우 Windows 작업 관리자가 100 %를보고합니다. 리눅스 도구가 비슷한 작업을 수행합니까, 아니면 1 코어 작업에 대해 100 %를보고 100*N cores %합니까? 모든 코어가 사용 중일 때 ?
yiding

2
나는 4 개의 코어를 가지고 있고 리눅스에서는 시스템 모니터 도구를 사용한다
Maniek

1
@Quoi 실제로는 아닙니다. 해당 프로그램이 모두 실행중인 경우 스레드는 Windows 및 Linux에서 중단없이 실행됩니다.
David Heffernan

답변:


387

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

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

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

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

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


2
그렇습니다- '4 + 4'i7 (하이퍼 스레딩)에서 하나의 사소한 CPU 루프가 약 17-18 %로 나옵니다.
Martin James

왜 응답자는 여전히 150UP를 가지고 있지만 그의 점수는 700입니다 ... 너무 버그입니까? :-/
uday

5
@uDaY, 하루에 최대 200 명의 담당자가 있기 때문에 그 이후의 모든 투표는 계산되지 않으며, 수락 된 응답자는 여전히 유효합니다.
sa_ddam213

3
@thatotherguy 정확히 shift-I를 눌러 전환 할 때? 상단이 실행되는 동안?
Geek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.