inflearn logo
강의

Course

Instructor

[C# and Unity MMORPG Game Development Series] Part 4: Game Server

Context Switching

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

39

ehdrkwhr8889925

2 asked

0

SpinLock은 어찌보면 CPU 코어를 계속 점유하고 계속해서 끝났는지 확인하는거잖아요?

그렇기에 커널로 내려가는 컨텍스트 스위칭이 일어나지 않거나 최소화 될거다라고 생각하는데요.

근데 하나 궁금한건 결국 운영체제 내에서 스케줄링같이 코어에서 점유하고 있는 스레드를 강제적으로(?) 다른 스레드로 바꾸지 않나요?

바꾼다하면 결국 SpinLock도 컨텍스트 스위칭이 필수불가결한건가 싶어 질문드립니다.

C# unity 네트워크

Answer 2

0

Rookiss

SpinLock은 어찌보면 CPU 코어를 계속 점유하고 계속해서 끝났는지 확인하는거잖아요?
-> 네 그렇습니다

그렇기에 커널로 내려가는 컨텍스트 스위칭이 일어나지 않거나 최소화 될거다라고 생각하는데요.
-> 최소화 되는 것이 맞습니다.

근데 하나 궁금한건 결국 운영체제 내에서 스케줄링같이 코어에서 점유하고 있는 스레드를 강제적으로(?) 다른 스레드로 바꾸지 않나요?
-> 물론입니다. 그게 안 된다면 모든 쓰레드에서 스핀락을 돌리면 운영체제게 뻗어버리겠죠. 기본적으로 설계 구조상, 주기적으로 타임아웃을 걸어 최소한 운영체제도 먹고 살게 해줍니다. 하지만 통상적인 상황에서 프로세스가 자발적으로 (즉, 시스템 콜 종류의 파일/네트워크 입출력 등을 호출할 때) 자신의 소유권을 내준다면 운영체제는 이 때다 하도 다른 일을 하기 때문에, SpinLock을 할 때와 안 할 때의 차이는 매우 큽니다. 언젠가는 뺏기지만 최대한 안 뺏기기 위해 발버둥하는 느낌이랄까요

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 김동현님!

SpinLock과 컨텍스트 스위칭에 관련된 질문에 대해 답변을 드리겠습니다. SpinLock은 락을 유지한 상태에서 쓰레드가 계속해서 해당 락이 풀리기를 기다리는 동안 루프를 도는 방식입니다. 이 경우, 스레드는 Context Switching을 피하는 대신 CPU를 계속해서 점유합니다. 그렇다면 Context Switching이 발생하지 않을까요?

다음 쪽 답변들을 확인해 보시면 더욱 이해가 쉬우실 것 같습니다:

  1. 스핀락에 대해 궁금한 부분이 있습니다.
    스핀락은 운영체제에 따라 다르게 동작하며, 운영체제가 스케줄링을 통해 언제든지 스레드를 다른 것으로 교체할 수 있습니다. 하지만 스핀락을 사용하는 동안에는 일반적으로 스레드가 자신이 할당받은 CPU 시간을 최대한 활용하려 하므로, CPU 점유율이 높아질 수 있습니다.

  2. 안녕하세요 선생님 lock과 spinlock에 대해서 질문드립니다.
    해당 답변에서는 스핀락이 무한 대기하는 동안 컨텍스트 스위칭이 일어나지 않지만, 다른 쓰레드가 커널 모드로 들어간 경우 교체가 발생할 수 있음을 설명합니다. 따라서 스핀락을 잘못 사용하면 CPU 소모가 커질 수 있다고도 합니다.

  3. Context Switching 질문
    Context Switching에 대해 전반적으로 설명하고 있으며, 스레드의 우선순위와 스케줄링 정책에 따라 스레드 교체가 일어날 수 있음을 확인할 수 있습니다.

결국 SpinLock을 사용할 때는 시스템의 전반적인 스케줄링 정책과 컨텍스트 스위칭의 발생 여부를 주의 깊게 고려해야 합니다. 스핀락이 최적의 선택이 아닐 수 있으며 잘못 사용하면 성능 저하를 일으킬 수 있으니 주의가 필요합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

TLS 질문드립니다.

0

34

2

Unity Span

0

65

2

XML, Dll 차이점

0

99

2

Session 질문입니다

0

74

1

Write Read 커서 키워드

0

69

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

65

2

네트워크 Send 전담 스레드 배치

0

94

2

UnhandledException 으로 서버 터지는 경우

0

82

2

컨텐츠 단, 엔진 단

0

100

1

질문 있습니다

0

73

2

C# 게임서버 3D MMORPG

0

141

2

유니티6 버전

0

94

2

receive하는 부분과 send하는 부분의 차이

0

128

2

커서의 위치의 중요성

0

99

2

C++ 전혀 모르는데 C# 서버

0

164

2

강의에 질문이 있습니다

0

83

2

멀티스레드 이해도 질문

0

90

1

500 vs 500

0

122

3

OnAcceptHandler 액션 함수

0

57

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

185

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

78

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

100

1

스핀락 질문.

0

104

2

안녕하세요 취업 학원 관련해서 문의드립니다.

0

174

2