-
컨텍스트 스위칭(Context Switching)게임서버/멀티쓰레드 프로그래밍 2022. 3. 11. 15:15
1. 컨텍스트 스위칭 방법
Lock 구현 이론에서 컨텍스트 스위칭은 락이 닫혀있으면 잠시 휴식상태에 들어갔다가 락이 열려있는지 주기적으로 확인하는 방법이라고 하였다. 그리고 쉬는 방법에도 3가지가 있다.
참고로 기존의 스핀락에 아래의 코드들을 추가하면 된다.
Thread.Sleep(1);
무조건 휴식 => 무조건 1ms 정도 쉼.
Thread.Sleep(0);
조건부 양보 => 나보다 우선순위가 낮은 애들한테는 양보 불가 => 우선순위가 나보다 같거나 높은 쓰레드가 없으면 다시 본인한테
Thread.Yield();
관대한 양보 => 관대하게 양보할테니, 지금 실행이 가능한 쓰레드가 있으면 실행하세요. => 실행 가능한 애가 없으면 남은 시간 소진
2. 한계점
하지만 대기하는 동안 다른 작업을 한다는 것이 효율적으로 보일 수 있으나 오히려 왔다갔다 하는 시간이 더 성능에 부담이 되기도한다. 따라서 스핀락을 사용하는게 더 좋다.
'게임서버 > 멀티쓰레드 프로그래밍' 카테고리의 다른 글
ReaderWriterLock (0) 2022.03.11 오토리셋이벤트(AutoResetEvent) (0) 2022.03.11 스핀락(SpinLock) (0) 2022.03.11 Lock 구현 이론 (0) 2022.03.11 데드락 (0) 2022.03.10