반응형
"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%가 됩니다.
즉, 디폴트로는top
Linux 에서는 무한 루프가 ~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
반응형
'sourcecode' 카테고리의 다른 글
포인터 캐스팅 시 얼라인먼트에 대해 걱정해야 합니까? (0) | 2022.08.30 |
---|---|
어레이의 주소가 C의 값과 같은 이유는 무엇입니까? (0) | 2022.08.30 |
VUE2js: 소품 변경 후 컴포넌트를 재렌더하는 방법 (0) | 2022.08.30 |
##(더블 해시)는 프리프로세서 디렉티브에서 무엇을 합니까? (0) | 2022.08.30 |
PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init (&mutex, param) (0) | 2022.08.30 |