Sleep(0)의 의미 델파이(Delphi)

Sleep() 함수는 밀리초(millisecond, 1/1000) 단위의 시간을 매개변수로 입력 받아 해당 프로그램을 '대기(Suspend)'시키는 역할을 한다.

윈도우에서 대부분의 프로그램(프로세스 또는 작업)은 동일한 우선순위(Priority)로 동작한다. 따라서 CPU 사용 시간과 자원을 각 프로그램에게 동일하게 할당한다. Sleep() 함수를 사용하면, 해당 프로그램은 대기 상태로 전환되고 다른 프로그램에게 자원을 양보하게 되는 것이다.

Sleep(0) 은 언뜻 보면 의미없어보일 수도 있다. 실제 어떤 개발자는 Sleep(0) 을 주면 해당 프로그램은 무한 루프와 비슷한 상태로 동작한다고 하는 경우도 봤다.
그러나 실제로 Sleep(0)을 사용하면 '스위칭(Switching)'이 발생한다. 즉, 이 구문을 사용하는 순간 같은 우선 순위에 있는 다른 프로그램이 동작한다. 하지만 대기 시간이 0초이므로 우선 순위기 낮은 프로그램에게는 실행 기회가 주어지지 않는다.
따라서 우선 순위가 높은 프로그램에서 Sleep(0) 을 사용했을 경우 스위칭이 발생하지 않고 모든 자원을 독점하는 듯이 보일 수도 있는 것이다.

Sleep() 함수의 이런 특징들은 응용 프로그램에서 직접 관리하는 멀티 스레딩에도 적용된다. 따라서 멀티 스레드 프로그래밍에서, 여러 스레드가 모두 효율적으로 동작할 수 있도록 하기 위해서는 우선 순위 지정과 함께 Sleep() 함수를 잘 사용해야 한다.


덧글

  • 테리 2012/06/26 16:07 # 삭제 답글

    좋은 내용 잘 보고 갑니다.
댓글 입력 영역