|
마린보이 님이 쓰신 글 :
: 감사합니다.
: 그런데 선언하고 실행만 시켜도 컴퓨터 성능에서 보면 프로세서 부분이 100 %가 됩니다.
: 실행은 간단하게 화면 카운터해서 연출하는것입니다.
: 카운터한것을 Label 에 연출하는것 뿐입이다. ( 너무도 간단한것 )
:
: 지속적인 프로세서 100 %로 인하여 CPU 가 열이 발생하는지 모르겠지만
: 노트북 방열용 휀이 동작합니다.
아무리 간단한 연산이라도 무한루프를 돌리면 CPU 사용율은 100%를 칩니다.
예를 들어, 아래와 같이 하면 CPU 사용율은 100%를 칩니다.
int n=0;
while(1) {
n++;
}
이 것을 메인스레드에서 실행하든 별도의 스레드에서 하건 상관 없이 100%를 칩니다.
(물론, 위의 while 루프 내에 어떤 이벤트 등을 기다리게 하는 코드가 들어가 있다면 CPU 사용율이 100%를 치지 않을 수 있습니다)
보통은 위와같이 쉴틈 없이 연산을 하도록 프로그램을 작성하지 않고, 이벤트 등을 기다리는 시간이 있게 되는데 이 때 CPU가 쉬게 되며 따라서 사용율이 100% 미만으로 떨어지게 됩니다.
CPU 사용율이 100%를 치기위해서는, 현재 시스템에 몇 개의 스레드가 실행되고 있는지는 중요하지 않습니다.
어떤 스레드건 위와 같은 식의 무한루프를 돌려버리면 충분합니다.
이는, 복수 개의 스레드가 있을 때 운영체제가 이들을 어떤식으로 실행하는지 생각해보면 알 수 있을 것입니다.
A,B,C 세 스레드가 있다고 가정하면,
A 스레드가 시간초과되거나 기타 이유가 발생하면 B 스레드를 실행시키고
B 스레드가 시간초과되거나 기타 이유가 발생하면 C 스레드를 실행시키고
C 스레드가 시간초과되거나 기타 이유가 발생하면 A 스레드를 실행시키느 식으로 진행됩니다.
그런데 A,B,C 동시에 어떤 이벤트 등을 기다리고 있는 경우가 대부분 발생합니다.
(보통은 이 상태에 있는 시간이 상당히 깁니다.)
예를 들어, 사용자가 마우스로 클릭해야만 그 때서야 그에 따른 작업을 한다든가 하는...
이게 보통의 흐름입니다.
세 개 중 어떤 것이라도 이벤트 등을 기다리는 여유 없이 위와 같은 식의 무한루프를 돌려야 한다면 CPU는 쉴틈이 없습니다.
|