인프런 커뮤니티 질문&답변

이승표님의 프로필 이미지
이승표

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

JobQueue

JobQueue 질문 드립니다.

작성

·

321

0

안녕하세요.

1. Room이 JobSerializer를 상속받게 변경된 이후 멀티쓰레드 환경에 따른 여러가지 실행순서 경우의 수를 신경써 줘야 되서 안전하게 사용하기 위해서는 많이 복잡해 지는 것 같습니다.

실질적으로 모든 경우의 수를 매번 신경쓰며 사용하기엔 무리가 있는 것 같습니다. JobSerializer를 안전하게 사용할 수 있는 팁이나 노하우가 있을까요.

2. JobSerializer는 여러개의 쓰레드 중 하나의 쓰레드에서만 실행되는 것이 보장되어야 할 것 같은데요. 이것을 보장할 수 있는 방법이 있을까요. 또 다른 A라는 JobSerializer로 들어가야할 Job이 B라는 JobSerializer로 들어가는 상황을 방지하거나 잡아낼 수 있는 방법이 있을까요?

답변 3

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

모든 경우의 수를 신경 쓰는 것이 아닙니다.
Part4에서는 첫 일감을 먼저 넣는 애가 실행까지 담당했고
Part7에서는 그냥 별도의 실행 담당 쓰레드를 두게 했습니다. (Push난 아무나 lock잡고 가능)

0

이승표님의 프로필 이미지
이승표
질문자

안정장치를 넣는 방법에 대한 부분, 고민해 보도록 하겠습니다.

C++ 서버 강의에서는 안전장치에 대한 부분도 소개해주시면 좋을 것 같습니다.

혹시 서버에서 함수마다 JobSerializer 위에서 호출되고 있는지 체크하는 매크로는 어떻게 만들 수 있을지 좀 더 자세히 알려주실 수 있으실지 궁금합니다.

Rookiss님의 프로필 이미지
Rookiss
지식공유자

기억을 되살려 보자면 TLS 영역에 현재 실행되는 JobQueue(JobSerializer)를 기록해서
그게 현재 객체가 맞는지 비교하는 식으로 했습니다.
질문은 기본적으로 수업 내용중에 이해 안가는 부분을 답변을 드리는 것이지,
그 외의 내용에 대해 일일히 답변 드릴 수는 없으니 양해 바랍니다.

이승표님의 프로필 이미지
이승표
질문자

감사합니다. 수업에 관한 내용을 벗어나지 않도록 주의하겠습니다. C++강의에서는 JobSerializer의 안정장치에 대한 부분도 소개해 주시면 감사드리겠습니다.

0

이승표님의 프로필 이미지
이승표
질문자

안녕하세요. 답변 감사드립니다.

모든 경우의 수를 신경쓰는 것이 아니라 하더라도 JobQueue에서 이후에 실행되는 로직과, 바로 실행되는 로직들의 순서를 프로그램 전체적으로 그려보며 코딩을 해야할 것 같아서 질문을 드려 본 것입니다.

A라는 JobSerializer에서 실행되어야 할 Job이 B라는 JobSerializer에 프로그래머가 실수로 넣어주게 될 경우 프로그래머가 로직을 살펴보며 신경을 써 줘야 하는지 아니면 로직에서 검출해 주는 조건문을 넣어줄 수 있는지 궁금합니다.

이전에 Actor모델에서 JobSerializer에서의 실행이 ThreadSafe하다는 것을 보장하는 조건문을 넣어 준다는 것을 들은 적이 있습니다.

제가 잘 모르지만 궁금한 상태에서 질문드리는 것이니 양해 부탁드리겠습니다.

Rookiss님의 프로필 이미지
Rookiss
지식공유자

Job 방식으로 돌아가는 객체에 멋대로 접근해서
멤버함수를 호출 하는 등의 행동은 치명적인 버그를 유발합니다.
당연히 성능을 조금 포기하고 안전장치를 넣을 수는 있지만,
기본적으로 Job 방식에 대한 이해도를 갖고 컨텐츠 작업을 해야 합니다.
안전장치를 넣는 방법은 정말 다양하게 있으니 고민해보시기 바랍니다.
(ex. 이전 C++ 서버에서는 함수마다 JobSerializer 위에서 호출되고 있는지 체크하는 매크로를 만들어서 사용했었습니다)

이승표님의 프로필 이미지
이승표

작성한 질문수

질문하기