검색결과 리스트
글
흔히Thread안에 thread context switching을 목적으로Sleep()함수를 많이 쓰는데요. Sleep(0)와 Sleep(1)의 성능상 차이점이 꽤 있다고 하네요. 무의식적으로 그냥 썼는데 이것에 관한 좋은 기사가 있어 내용 공유합니다.
관련 기사는 맨 아래를 보시면 됩니다.
내용을 간략히 요약하자면, Thread간 우선순위(Priority)가 서로 다를 경우 문제가 발생합니다.
Sleep(0)의 경우, 다른Thread가 ready to run 되었다고 해서 자신이 쥐고 있던 CPU의 선점을 풀지 않습니다. 선점을 풀려면 조건이 있는데 그 ready to run 인Thread가 지금 선점한 Thread와 우선순위가 equal이어야 한다고 하네요. 즉, 우선순위가 서로 같아야 A Thread에서 B Thread로 CPU사용주체가 넘어간다고 합니다.
그와 반대로 Sleep(1)의 경우, 그런 Thread간 우선순위 상관없이 다른 Thread가 ready to run 상태에 있다면 그Thread를 위해 자신이 쥐고 있던 CPU를 놔주게 됩니다. 그럼 목적한 것처럼 A Thread에서 B Thread로 switching이 이뤄지겠죠. 간략하게 Sleep(0)과 Sleep(1)의 미묘한 차이점을 정리해봤습니다.
The moral of the story? Priorities are evil, don't mess with them. Always use Sleep(1) instead of Sleep(0). The Windows balance set manager is cool.
자세한 내용은 아래Article을 참고하세용. 원문 주소
http://www.bluebytesoftware.com/blog/PermaLink,guid,1c013d42-c983-4102-9233-ca54b8f3d1a1.aspx
출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8231&page=1
'-- VC++' 카테고리의 다른 글
익스플로러 보안설정 변경 (0) | 2009.05.14 |
---|---|
windbg tutorial part 1 (0) | 2009.05.13 |
CoInitializeEx(NULL, COINIT_MULTITHREADED) 사용 시 설정값 (0) | 2009.03.03 |
Visual C++ 버전별 배포방법 (0) | 2009.02.19 |
GetQueuedCompletionStatus failed with error 64 (0) | 2008.12.04 |
RECENT COMMENT