Sleep(0)과 Sleep(1)의 차이

-- VC++ 2009. 3. 6. 15:21
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

흔히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

posted by 어린왕자악꿍