inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

패킷 모아 보내기

JobQueue의 Push함수 관련 질문 있습니다.

해결된 질문

146

Kosh PaE

작성한 질문수 1

0

안녕하세요. 강의 정말 잘 보고 있습니다.

 

JobQueue의 Push 함수를 호출하는 스레드가 Action까지 처리하게 되는데, 이는 Push를 호출하는 시점부터 해당 Queue에 모든 Job이 비워질 때까지 Caller가 Blocked 됩니다.

 

이를 JobQueue의 Pop과 Action.Invoke를 담당하는 스레드를 하나 만들고, 백그라운드에서 폴링하는 방식으로 만들려 합니다.

 

즉, Push를 호출한 스레드를 사용할 지, 미리 스레드를 만들어두고 폴링하는 방식으로 사용할 지의 차이인 것 같습니다.

 

두 방식 중 어느 방식이 나을지 알고 싶습니다.

 

감사합니다.

C# unity 네트워크

답변 1

0

Rookiss

예리한 질문이고 그걸 생각하신다면 벌써 상당히 이해도가 높은 것으로 볼 수 있습니다.
결과부터 말씀드리자면 두 방법 모두 사용됩니다.
실제로 제가 일한 대기업 프로젝트 중 하나는 전자를, 하나는 후자를 사용했었습니다.

일감을 만드는 쪽이 처리까지 담당하면
직원이 만능맨이 되니 여러모로 편리하지만,
일감이 몰릴 경우 사실상 다른 일을 못하는 문제가 생깁니다.

일감을 만드는 쪽과 처리하는 쪽을 분리하면
그런 문제는 해결되지만, 반대로 일감을 처리하는 쪽을 어떻게
적당히 배치할지가 애매해집니다.

폴링 방식을 채택한다 하셨는데 만약 Actor 모델로 가서
JobQueue를 10만개 관리해야 한다면, 쓰레드를 10만개 생성해서 배치할 수는 없고
현실적으로 쓰레드 수 20~40 사이로 유지하면서 이를 바쁘게 배분해야 합니다.
일감을 처음 밀어넣는 쪽에서 실행까지 하면 이런 '분배' 관점에서의 문제가 완화되지만,
각기 처리를 배치한다면, 이 또한 고민거리가 됩니다.
물론 폴링 방식은 단점이 많으므로 ConditionVariable이나 이벤트처럼
부분적으로 대기를 타다가 일감이 들어오면 깨어나서 처리하게 만드는게 현실적입니다.

0

Kosh PaE

자세한 답변 정말 감사합니다.

 

이 부분은 아무래도 어떤 게임을 만들게 되는지에 따라 갈리겠네요. 심리스 방식의 게임을 목표로 하고 있는데, 확실히 오브젝트마다 JobQueue를 배치하면 폴링방식은 문제가 많아질 것 같습니다.

 

참고해서 좋은 게임 만들겠습니다. 강의 잘 보고 있습니다. 감사합니다.

TLS 질문드립니다.

0

45

2

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

0

48

2

Unity Span

0

76

2

XML, Dll 차이점

0

106

2

Session 질문입니다

0

80

1

Write Read 커서 키워드

0

76

1

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

0

72

2

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

0

98

2

UnhandledException 으로 서버 터지는 경우

0

87

2

컨텐츠 단, 엔진 단

0

106

1

질문 있습니다

0

77

2

C# 게임서버 3D MMORPG

0

147

2

유니티6 버전

0

98

2

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

0

134

2

커서의 위치의 중요성

0

104

2

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

0

170

2

강의에 질문이 있습니다

0

86

2

멀티스레드 이해도 질문

0

95

1

500 vs 500

0

130

3

OnAcceptHandler 액션 함수

0

62

1

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

0

193

2

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

0

83

2

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

0

106

1

스핀락 질문.

0

110

2