인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

elan's profile image
elan

asked

[MMORPG Game Development Series with C# and Unity] Part 9: MMO Content Implementation (DB Linkage + Large Structure + Live Preparation)

Change the game structure

Thread.Sleep(0) 의미

Written on

·

942

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.
MMORPG

Answer 1

1

rookiss님의 프로필 이미지
rookiss
Instructor

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

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

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

elan's profile image
elan

asked

Ask a question