inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

JobTimer

JobQueue 질문이있습니다

350

장재범

작성한 질문수 44

0

main에서 TickRoom함수 내부에서 timer를 이용해서 room.Update를 해주고
room.Update에서는 Flush를 해줍니다.


근데 Flush를 보면 싱글쓰레드처럼 따로 lock을 걸지않고 실행되고 있습니다.
만약에 timer.Interval에 설정한 시간이 지났는데 flush가 다 안끝나서 다른 쓰레드가 flush로 들어오면 멀티쓰레드 환경이 되서 오류가 발생할 수도 있을 것 같은데

이 문제는 현재 코드에서 예외처리를 안해준거죠?

https://stackoverflow.com/questions/37747650/do-timers-continue-if-function-didnt-finish

선생님께 찾아보고 질문한다는 성의를 보이기 위해서.... ㅎ..ㅎ

C# unity

답변 1

0

Rookiss

Job 방식으로 갈 경우, Lock을 굳이 안 걸어도 됩니다.
왜냐하면 어차피 1개의 쓰레드에서만 Job을 실행한다는 것을
서버엔진 '구조'상으로 보장해주기 때문이죠.
다만 Job 방식을 사용할 경우 Lock 코드를 섞어 쓰는 것을 어지간하면 금지해야 합니다.
(단순한 get/set 정도만 Lock 처리를 하고, 그 외 로직은 Job으로 등록)

0

장재범

윗글처럼

Flush를 보면 싱글쓰레드처럼 따로 lock을 걸지않고 실행되고 있습니다.
만약에 timer.Interval에 설정한 시간이 지났는데 flush가 다 안끝나서 다른 쓰레드가 flush로 들어오면 멀티쓰레드 환경이 되서 오류가 발생할 수도 있을 것 같은데

이런 상황이면 구조상 1개의 쓰레드로만 운용된다는 것이 보장 안되는 것 아닌가요.. ㅇ..ㅇ

0

Rookiss

아 그 부분은 잘 이해하셨고요.
현재 C# 서버는 간단하게 [게임로직/DB/..] 이런 식으로 역할별로 쪼개서
단일 쓰레드가 게임 로직을 담당하는게 맞구요.
실제로 이렇게 만드는 경우도 많이 있습니다.

보다 고차원적으로 만들려면 Flush를 일종의
Lock-based Queue 혹은 Lock-Free Queue 등에서 관리해서
일감을 실행하게 하면 되는데
이 부분은 너무 난이도가 높아 C++ 서버에서만 다룹니다.

0

장재범

아하 감사합니다

근데

현재 C# 서버는 간단하게 [게임로직/DB/..] 이런 식으로 역할별로 쪼개서
단일 쓰레드가 게임 로직을 담당하는게 맞구요.

이 말이 timer.Interval에 설정한 시간을 넘길만큼 많은 일을 하지 않아서 괜찮다는 말로 이해해도 되는건가요??

MessagePack

0

85

1

본인 플레이어 이동 관련 질문

0

49

1

Part7 Part9 질문이 있습니다.

0

72

1

.

0

116

1

.

0

105

2

게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제

0

91

1

타일 팔레트 깔았는데도 안돼요

0

115

2

2D로 그냥 만들어도 되나요?

0

81

2

지난 강의와 이어지는게 맞을까요?

0

80

2

순환참조 문제로 인해 발생하는 문제는 없을까요?

0

162

2

유니티 클라와 C++서버연동

0

277

2

멀티플레이 테스트 환경 관련 질문입니다

0

207

3

강의 후반부에 순서 동기화를 위해 잡큐를 사용 안 한 부분 질문입니다!

0

150

2

코드 관련한 몇 가지 질문입니다!

0

153

2

3d 프로젝트 이동 동기화 관련

0

321

4

파트 7 스트레스 테스트 질문 드립니다.

1

189

2

맵 이동 방식

0

133

0

맵 이동 관련해서 질문드립니다.

0

91

1

안녕하세요 도저히 알 수 없는 오류가 나와서 질문드려요,,

0

201

2

안녕하세요. 일전에 질문 드린 포폴 준비 관련 질문의 추가 질문입니다!

0

160

1

[팁] 2024년 기준 버전 이슈?

0

455

1

SendBuffer.cs 삭제 후 대체 되는 부분의 장단점?

1

203

1

지금 강의의 유니티 클라를 IOCP 서버와 연동하는 것

0

336

2

PushAfter 사용 질문

0

192

1