Thread.Sleep(0) 의미
1064
작성한 질문수 35
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나
아무거나 골라서 사용해도 무방합니다.
마우스 이벤트 처리방법(오브젝트간 인터렉션)
0
623
1
RecvArgs_Completed에서 lock을 안하는 이유
0
517
1
Entity framework 질문드립니다.
0
576
2
json 직렬화
1
289
1
mmo 와 pvp
0
535
2
github로 프로젝트를 push, pull할 때 질문
1
530
1
Iocp 서버 관련 질문드립니다.
0
329
1
서버 관련 질문
0
397
1
DB 처리관련 질문이 있습니다
0
302
1
안녕하세요. 질문드립니다.
1
1509
2
이해한 것이 맞나 궁금합니다.
0
287
1
마이그레이션 파일이 이상합니다.
0
283
1
강의 마지막으로 질문 드립니다.
0
679
2
ItemDbId,구조 설계
0
265
1
MMO 서버 관리 질문 드립니다!
0
323
1
디비 정보 나누기
0
241
1
AccountDb 업데이트
0
308
1
콘솔창이 아니라 브라우저에서 실행
0
282
2
메모리 누수문제.
0
497
1
유니티에서 클라이언트 빌드후 실행하면 맵 로드가 안됩니다.
0
364
1
외부 네트워크에서도 접속해서 게임하기
1
339
1
유니티클라에서 패킷을 계속 보내지 않고 lockstep이나 추측항법으로 동기화를 할 수 있을까요?
0
597
1
서버 메모리와 DB 저장 관련 질문
0
370
1
JsonUtility.FromJson 관해서 질문있습니다.
0
278
1





