• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Thread.Sleep(0) 의미

21.01.31 07:41 작성 조회수 668

0

1. Thread.Sleep(0)은 실행권을 커널에다 넘겨주어 CPU까 쓸데 없이 사용되는 것을 우회 할 수 있다는 것이 정확히 어떤식으로 동작하는 것인가요?

2. Thread.Sleep(0) 과 Thread.Yield()의 차이는 무엇인가요?

( CS 지식이 부족하여 검색 내용이 제대로 이해가 안되어 질문드립니다 )

*검색 내용

differences between Thread.Yield() and Thread.Sleep(0)

  • after calling Thread.Yield(), time-slice is given only to those threads who are running at the same processor with current thread.
  • Thread.Yield() has a boolean return value which indicates that whether there were any threads who has received time-slice or not, but Thread.Sleep() has not return value.
  • Thread.Sleep(0) prevents time-slice being handed over to threads with lower priorities. So it is more prone to starvation. But Thread.Yield() doesn't care to thread priorities, so starvation is less to happen.

답변 1

답변을 작성해보세요.

1

1.
요약하면 운영체제 커널이 유저레벨 프로그램(메모장, LOL 등등)한테 실행 시간(timeslice)을 배정해서,
그 시간만큼 유저레벨 프로그램이 실행되고,
시간이 끝나면 다시 CPU 소유권을 반납하는게 일반적인 상황입니다.
근데 유저레벨 프로그램에서 딱히 할일이 없으면 굳이 무한루프를 돌면서
시간을 기다리기 보다는 미연에 소유권을 반납할 수 있습니다.
구체적으로 어떻게 동작하는지는 운영체제에 따라 다르고 복잡한 주제입니다.

2. 
자기가 할당받은 실행 시간(timeslice)을 반납하면서
다른 프로세스한테 양보할 때 여러가지 시나리오가 있는데
1) 아무한테나 상관없이 넘겨줄지,
2) 자기보다 우선순위가 같거나 높은 애들한테만 넘겨줄지,
3) 동일한 CPU 코어에서 실행되는 프로세스한테만 넘겨줄지 등; 이 있는데
그 차이에 대해 설명하고 있습니다.

어느 쪽을 선택해도 아주 큰 차이는 없으니
OS에 대해 공부하기 전에는 그냥 Sleep이나 Yield나
아무거나 골라서 사용해도 무방합니다.