inflearn logo
강의

Course

Instructor

[C# and Unity MMORPG Game Development Series] Part 9: MMO Content Implementation (DB Integration + Large-scale Architecture + Live Preparation)

HP Linkage #2

Async와 Job방식의 차이가 궁금합니다.

293

winwoo49462600

4 asked

0

이전 강의에서 PacketHandller 부분에서 Async를 사용하지 않고 Blocking 방식을 사용하는 이유가 EAP 기반이기 때문에 이미 패킷마다 할당된 쓰레드에 의해 I/O가 이루어지기 때문이라고 이해했습니다.

하지만 GameRoom같은 경우엔 GameRoom 담당 쓰레드가 존재하고 GameRoom 쓰레드의 동기화를 위해 JobSerialize를 이용하여 각 쓰레드가 GameRoom의 Job을 Push하여 동기화를 진행하는데

이때 Job 안에서 DB I/O가 Blocking으로 이루어질 경우 GameRoom 쓰레드가 Blocking이 되고 그렇게되면 GameRoom이 느려지는 상황이 되기때문에 DB I/O 전용 쓰레드(JobSerialize)를 만들어 쓰는것으로 이해했습니다.

결국 개념적으로 봤을때 GameRoom 쓰레드는 메인쓰레드 역할을 하고 DB I/O 처리는 서브쓰레드에게 맡기고 완료됐을때 결과만 다시 메인쓰레드에 돌려받는 NonBlocking I/O 방식인데

Async/Await 역시 호출한 쓰레드를 Blocking 하지 않고 서브쓰레드에게 I/O를 맡긴뒤 작업이 완료되면 메인쓰레드에 결과를 반환하여 Await 이후에 처리한다고 이해하고 있습니다.

그렇다면 복잡하게 DB I/O 전용 쓰레드를 만들어주지 않고 Async/Await만 사용해도 될것같은데 이렇게 하는 이유가 있을까요?

아니면 이후에 강의에 이에 대한 개선이 나오는걸까요?

MMORPG db ef

Answer 1

1

Rookiss

그냥 간단하게 답변 드리자면,
이런 부분은 자꾸 정답이 있다 생각하여
질문을 하실 필요 없고 원하시는 대로 하시면 됩니다.

기본적으로 서버는 C++로 만드는 비중이 높아왔고 그렇기 때문에 DB도
async/await 방식이 아닌 블로킹으로 하되 따로 쓰레드를 빼는 것이 정석이지만,
요즘은 DB 부분만 REST API 웹으로 빼서 하는 경우도 있습니다.

중요하게 지킬 부분은 그냥 <로직 쓰레드에서 DB 처리를 기다리느라 대기하면 절대 안 된다>는
절대 원칙 하나 정도이고 그 나머지는 정말 하고 싶으시다면 async/await 방식으로 하거나
다른 방식으로 하거나 그것은 중요하지도 않고 사실 리드 프로그래머가 정책을 결정하면 따르면 됩니다.
(서버 쪽은 보수적이라 async 기반으로 하는 프로젝트를 보지는 못했지만..)

컨텐츠를 만들다 보면 특정 DB 요청이 끝난 후에야
다음 요청을 처리해야 하는 경우가 많기 때문에
저라면 여전히 블로킹 DB 쓰레드를 선호할 것 같고
그리고 실전 MMO에선 DB 쓰레드를 4개 이상 배치하긴 합니다.

질문 있습니다.

0

42

2

심리스 존 방식 난이도

0

86

2

RewardPlayer함수 에 대해서

0

55

1

모바일 데이터 환경에서의 렉 현상 문의 드립니다.

0

88

2

화살 처리 관련 질문이 있습니다!

0

116

1

part1~9 모두 완료하였습니다.

0

209

2

이번 수업 특히 좋았습니다

0

149

1

화살과 몬스터 버그와 관련한 질문입니다

0

169

3

DummyClient cpu스펙 질문있습니다.

0

120

2

InventoryManager 클래스에서 사소하지만 꼭 알고 싶은 사항이 있습니다

0

111

2

FANTASTIC UI STARTER PACK이 없네요..

0

119

1

면접 질문 드립니다.

0

146

1

로그인 정보 암호화는 어떻게 하나요?

0

231

2

조건식 중단점을 걸면 문제가 발생합니다

0

133

0

GenProto.bat 파일 오류

0

169

2

코드변경을 하면 오류가 생기는데요

0

188

2

아이템 슬롯 선적용에 대한 질문입니다

0

193

1

M1 M2강의의 경우 어느정도 수준이 필요한가요?

0

308

1

3~4일 간격으로 CPU 99% 사용되는 문제

0

421

2

JobSerializer 관련

0

287

1

3D 게임 이동 동기화

0

462

2

GameLogic 쓰레드에서 모든 GameRoom을 처리하나요?

0

255

1

EF사용시 async사용

0

254

1

해당 강의를 완강하면 실제 여러 대 PC의 환경에서 MMO구현이 가능할까요?

0

358

1