inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스

대기와 락

안녕하세요 선생님 lock과 spinlock에 대해서 질문드립니다.

593

유영재

작성한 질문수 18

0

예전 스핀락 설명 하실때 메모한 내용입니다.

락을 걸고 있는 상대방이 조금만 기다리면 놔줄 것 같다는 확신이 있을 때는

굳이 Context-Switching까지 가지 않고 무식하게 대기하는 SpinLock이 좋습니다.

비행기 1인 화장실 앞에서 대기하는데,

안에서 손 씻고 있는 소리가 들린다면,

굳이 자리에  돌아가서 대기하기 보단 문앞에서 조금만 더 기다리는게 현명합니다.

MMO에서 lock을 쓰는 경우는 대부분 컨텐츠의 멀티쓰레드 경합 처리에서 사용하게 되는데,

어마어마하게 오래 걸리는 작업이 아닌 경우가 많기 때문에 

SpinLock이 대부분의 경우에서 유리합니다.

질문

컨텍스트 스위칭이라는게 a쓰레드가 공유 자원을

다쓰고 쓰레드 풀로 들어가면 b라는 쓰레드가

공유자원을 획득해서 사용하는 걸로 알고 있는데

그러니까 프로세스 내부에 stack 공간만 바뀌는

스핀락이라는게

무한 반복 타고 들어가서 계속 기다리잖아요

상대방이 빠져나올떄 까지

lock은 접근 했다가 a라는 쓰레드가 사용중이네

글멈 나는 다른 작업 하고 이따 한번 더와바야지

이 개념이 아닌가요?

여기서 왜 컨텍스트 스위칭이라는 표현을 쓰셨는지

여쭤봅니다?

a가 가고 b가 들어가야 컨텍스트 스위칭이 성립되는 게 아닌가요?

DBMS/RDBMS sql

답변 1

3

Rookiss

컨텍스트 스위칭이라는게 a쓰레드가 공유 자원을

다쓰고 쓰레드 풀로 들어가면 b라는 쓰레드가

공유자원을 획득해서 사용하는 걸로 알고 있는데

-> 그렇지 않습니다.

컨텍스트 스위칭은 공유 자원이랑은 아무런 상관이 없고 쓰레드 풀과도 무관합니다.
그냥 실행중인 어떤 쓰레드 A가 자신이 할당받은 실행시간(timeslice)을 다 쓰거나,
커널에서 실행해야 하는 함수 (sleep, yield 는 물론 console.writeline와 같은 것도 포함)를
호출하면서 유저모드->커널모드로 변환이 일어나고,
다른 쓰레드가 실행권을 얻으면서 쓰레드 교체가 일어나는 상황을 context switching이라고 합니다.

context는 문맥의 의미인데 말 그대로 현재 쓰레드가 실행중에 필요한 모든 정보(레지스터 등)를 의미하고
이 정보를 보존해야 다음 실행권을 얻을 때 현 실행 상태를 복원할 수 있습니다.
위 설명하신 내용을 보니 오해하시는 것 같은데
어떤 쓰레드가 모든 일을 끝내고 소멸될 때만 context switching이 일어나는 것이 아니라
커널레벨로 변환이 필요한 그 어떤 함수를 호출해도 일어납니다. (네트워크, 파일 io 등)


스핀락은 정말 유저 레벨에서 무한 while 루프를 돌고 있기 때문에
쓰레드 교체를 하지 않고 계속 CPU 자원을 소모하면서 버티는 것입니다.
반면 [그럼 나는 이따 한 번 더 와바야지~]라고 체념하면서
sleep, yield를 호출하고 
본인의 실행권을 내려놓으면,
바로 그 실행권이 다른 쓰레드에게 넘어가면서 Context Switching이 일어납니다.


그리고 스핀락도 락의 일종입니다.
말 그대로 경합이 일어났을 때 어떤 정책을 취할 것이냐 (양보? 버티기?)에 따라
동작이 다른 것이지 lock은 무조건 양보한다고 생각하면 안 됩니다.

최신 하드웨어에서 SQL Express 설치에러 해결법

0

49

1

인벤토리 테이플 데이터가 엄청 많아지면

0

90

2

DISTINCT의 행 개수와 COUNT(DISTICNT )의 결과가 왜 차이나는지 궁금합니다.

0

100

1

conect시 신뢰할 수 없는 기관에서 인증서 발급 오류 뜨시는분들

0

317

1

PRIMARY KEY와 CLUSTERED INDEX의 차이

0

324

1

락과 트랜잭션 격리수준 차이는 뭔가여?

0

531

1

외래 키 질문이 있습니다.

0

384

1

게임 프로젝트와 연동하는 강의 내용은 포함되어 있지 않는 건가요?

0

560

1

윈도우 함수는 SELECT에서만 사용가능한가요?

0

451

1

데이터 베이스가 만들어지지 않을 때

9

796

3

sql 강의 관련 질문

0

675

1

강의내용 외의 질문이 있습니다

0

578

1

sinter

0

357

1

테이블 여러개랑 조인

0

368

1

서버 컴퓨터 스펙에 따라서 성능 차이가 심한가요?

0

796

1

Non-Clustered 에서 clustered index 추가시

0

435

1

UNIQUE INDEX와 PRIMARY KEY의 기능적차이

0

581

1

Part5: 데이터베이스_ SSMS 입문 테이블작성 오류에관하여

2

898

2

인덱스의 저장 방식에 대해서 질문이 있습니다!

1

537

1

MSSQL vs AWS

0

359

1

join 관련 질문입니다.

0

286

2

Inner Join 질문

0

302

1

데이터베이스 원리는 CAP이론을 비유하여 설명하신 건지 궁금합니다.

1

398

0

CLUSTERED INDEX

1

297

1