SpinLock의 단점
 - Lock해제 되었는지 체크하기 위해선 매 프레임마다 Loop를 돌기때문에 비효율 적이다.

RandomLock
 - Lock이 해제됐는지 일정 "시간 주기"로 체크한다
 - 매 프레임마다 하지않기때문에 좀 더 효율적이다.
 - 어떠한 형태로 "시간 주기"를 설정하냐에 따라 동작이 다르다.

무조건 대기
 - 무조건 1ms 정도 대기한다.
 - 1ms "정도"인 이유는 정확한 대기시간은 운영체제의 스케쥴러가 결정한다.

Thread.Sleep(1)

조건부 대기
 - 자신보다 우선순위가 낮은 Thread한테는 양보 불가.
 - 자신보다 우선순위가 높거나 같은 Thread에게만 프로세스를 양보한다.
 - 이 경우 우선순위 설정에 따라 어떤 Thread는 기아현상(계속 프로세스 할당을 못받는 상황)을 겪게 될 수 있다.

Thread.Sleep(0)

관대한 대기
 - 지금 실행 가능한 Thread가 있으면 해당 Thread를 우선 실행시키고, 없을 경우에만 자신을 실행 시킨다.

Thread.Yield()

어떤 방법이 베스트라고 할 수 없고 상황에 맞게 사용하면 된다.

'프로그래밍 > 네트워크' 카테고리의 다른 글

SpinLock  (0) 2021.09.01
Lock  (0) 2021.08.29
Race Condition  (0) 2021.08.29
Cache  (0) 2021.08.27
Thread의 생성  (0) 2021.08.27

+ Recent posts