C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[43562] Re:Re:Re:Thread사용시 CPU 사용에 엄청난 부하가 발생한다.
[] 2283 읽음    2006-02-06 00:20
마린보이 님이 쓰신 글 :
: 감사합니다.
: 그런데 선언하고 실행만 시켜도 컴퓨터 성능에서 보면 프로세서 부분이 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는 쉴틈이 없습니다.

+ -

관련 글 리스트
43556 Thread사용시 CPU 사용에 엄청난 부하가 발생한다. 마린보이 1254 2006/02/04
43560     Re:Thread사용시 CPU 사용에 엄청난 부하가 발생한다. 1361 2006/02/05
43561         Re:Re:Thread사용시 CPU 사용에 엄청난 부하가 발생한다. 마린보이 1274 2006/02/05
43572             Re:Re:Re:Thread사용시 CPU 사용에 엄청난 부하가 발생한다. 라스코니 2000 2006/02/06
43562             Re:Re:Re:Thread사용시 CPU 사용에 엄청난 부하가 발생한다. 2283 2006/02/06
43632                 Re:Re:Re:Re:Thread사용시 CPU 사용에 엄청난 부하가 발생한다. 마린보이 1195 2006/02/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.