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

sangin1.park님의 프로필 이미지
sangin1.park

작성한 질문수

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

JobQueue #2

단일 스레드로 처리할 경우 속도 문제점 있나요?

작성

·

235

0

GameRoom을 하나의 스레드로 jobqueue를 사용해서 공유자원을 관리 하면 lock에서는 자유롭지만 하나의 스레드인 만큼 많은 처리를 해야할 경우 딜레이가 생길수도 있을거라고 생각하는데 lock을 타이트하게 거는 방법보다 하나의 스레드에서 처리하는게 속도가 더 빠른가요?

하나의 스레드로 룸을 관리하니 결국 작업을 하나씩처리에 따른 속도 이슈가 없는지 궁굼합니다. 예를들어 갑자기 수많은 이용자가 들어와 엔터패킷을 탄다면 디비도 접근해야될때 이에 따른 실시간 처리 성능이 보장되는지 궁굽합니다.

답변 2

0

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

무조건 Job방식이 좋습니다.
lock을 타이트하게 건다지만 컨텐츠 작업하다 보면 그게 힘들때도 생기는데
그러면 정말 멀티쓰레드가 의미가 없어집니다.
디비 접근은 담당 쓰레드한테 토스해서 다시 받으면 되구요!

sangin1.park님의 프로필 이미지
sangin1.park
질문자

답변감사합니다. 선생님 그러면 예를 들어 GameRoom안에서 오래 걸리는 작업을 수행한다고 한다면 딜레이가 걸려 패킷에 따라 수행해야할 작업들이 밀려버릴 수 있으니 오래걸리는 작업은 다른 스레드에게 gameroom안에서 push로 넘겨주고 다시 콜백을 받던가 다른 스레드 안에서 gameroom에 push를 하는 방식으로 작업을 수행하는게 맞겠네요?

0

안녕하세요, 인프런 AI 인턴입니다.

좋은 질문 주셨습니다. 단일 스레드 환경에서 많은 양의 처리를 해야 할 경우 성능 문제가 우려되는 것은 사실입니다. 복잡도와 요청의 양에 따라, 단일 스레드로 모든 요구를 충족시키는 것은 한계가 있을 수 있으며, 이 경우 멀티스레딩이나 비동기 처리 방법을 고려할 수 있습니다.

그러나 단일 스레드가 항상 나쁜 것만은 아니며, 특히 동시성 관리가 중요한 환경에서는 단일 스레드에서 직렬화된 작업 처리가 성능 상 이점을 가져올 수 있습니다. 그 이유는 락 경쟁(lock contention)과 콘텍스트 스위칭(context switching) 비용이 절감되기 때문입니다.

또한, 단일 스레드 환경에서도 Job Queue, Event Loop 등의 방법을 통해 비동기 처리를 효율적으로 관리할 수 있습니다. 그리고, 요구가 증가할 때는 서버 부하 분산, 데이터베이스 풀링 등 다른 아키텍처적 접근을 통해 성능 이슈를 해결할 수 있습니다.

상기하신 내용과 관련하여, “멀티 쓰레드 질문 드립니다.“라는 질문에서 다룬 주제가 비슷하여 참조가 될 수 있습니다. 여기에서는 GameRoom의 작업 처리 방식과 멀티 스레드 환경에서의 안전성에 대해 논의 되었습니다. 마찬가지로 이런 접근은 단일 스레드 환경에서의 처리 방식과 비교하여 귀하의 질문에 좀 더 통찰을 제공할 것입니다.

“멀티 쓰레드 질문 드립니다.”에서 다루어진 내용 중, “GameRoom 의 Broad
cast , Enter, Leave 등은 JobQueue 를 이용 하니 멀티 스레드에서 안전”
하다고 언급되어 있는 부분이 특히 관련이 있을 수 있으며, 이는 단일 스레드 환경에서의 작업 처리 방식에도 비슷하게 적용할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

sangin1.park님의 프로필 이미지
sangin1.park

작성한 질문수

질문하기