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

Running boy님의 프로필 이미지
Running boy

작성한 질문수

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

JobTimer

JobQueue는 무조건 싱글스레드 환경에서 돌아가게 구현하나요?

해결된 질문

작성

·

212

0

JobQueue에 쌓인 일감이 만약 극단적으로 많거나 작업 하나하나의 비용이 크다면 병목현상이 일어나지 않을까하는 의문이 생겼습니다.

JobQueue 내에서도 겹치지 않는 작업은 멀티스레딩으로 처리하여 최적화하는게 과연 효율이 나올지, 또 실제 현업에서 이렇게 적용하여 사용하는지 궁금합니다!

답변 2

0

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

개념을 아직 완벽히 이해를 못하신 것 같네요.
JobQueue는 싱글쓰레드로 돌아야 하고, 멀티쓰레드로 돌아가면
그 본연의 의미가 없어집니다. (어차피 락을 걸어야 하는 상황이 생기므로)
다만 게임 세상에 JobQueue를 1개만 배치한다는 것은 아니고,
대륙별로 구분한다거나, 심하면 Actor 단위로 (즉 모든 플레이어/몬스터/스킬 등에)
JobQueue를 1개씩 두기도 합니다.

0

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

“Running boy”님의 질문에 대해 C#과 유니티로 만드는 MMORPG 게임 개발 시리즈 중에서 JobQueue의 동작 방식과 멀티스레딩 처리에 대해 설명한 부분을 찾아보았습니다.

JobQueue는 일련의 작업(Task)을 순차적으로 실행하기 위해 사용되는 구조입니다. JobQueue가 싱글스레드 환경에서 동작하는지, 아니면 멀티스레드 환경에서도 최적화하여 사용할 수 있는지에 대한 질문인데요, 일반적으로 JobQueue의 기본적인 원리는 작업을 순차적으로 처리하기 위함이지만, 실제로 구현 방식은 상황에 따라 다양하게 접근될 수 있습니다.

업계에서는 JobQueue 내에서 겹치지 않는 작업에 대해서 멀티스레드 환경을 활용하여 성능을 최적화하는 경우도 있습니다. 이러한 최적화는 병목현상을 방지하고 처리 성능을 개선하는 데에 중점을 둡니다. 하지만 이런 접근은 추가적인 동기화 작업이 필요하게 되며, 이는 곧 설계의 복잡성을 증가시킵니다.

JobQueue 사용에 대한 질문에서는 JobQueue를 사용하면서 발생할 수 있는 복잡성과 성능 최적화 관련 논의가 있었습니다. 이 자료에서는 JobQueue를 사용하는 과정에서 겪을 수 있는 도전적인 사항들과, JobQueue를 여러 층위에서 사용할 경우 발생할 수 있는 이슈 등에 대해 언급되었습니다. 특히, 여러 JobQueue를 효과적으로 관리하는 방안에 대한 논의가 있어, 님의 질문과 관련성이 높습니다.

현업에서는 이러한 병목현상을 방지하기 위해 다양한 전략을 고안합니다. 예를 들어, 작업의 우선순위를 분류하거나, 특정 유형의 작업을 별도의 쓰레드 또는 쓰레드 풀에서 처리하는 방법 등입니다. 또한, 작업을 분산시켜서 여러 JobQueue에 할당하는 방식으로 병목현상을 완화할 수도 있습니다.

각각의 작업이 상호 의존성이 없고, 독립적으로 실행될 수 있다면 멀티스레딩을 사용하여 성능을 향상시킬 수 있습니다. 그러나 작업 사이에 데이터 일관성을 유지해야 하는 경우가 많으므로, 이 경우 추가적인 동기화 메커니즘이 필요합니다. 결국, 멀티스레딩을 사용할지 여부는 해당 작업의 특성과 동시에 실행되어야 할 작업의 종류, 그리고 데이터 동기화의 필요성 등을 고려하여 결정해야 합니다.

JobQueue 질문 드립니다.에서도 JobQueue와 관련해 논의된 바 있습니다. 여기에서는 JobQueue의 구현과 관련해 경합(Lock 경합) 문제에 대한 내용이 언급되었다는 점을 참고하시면 좋겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Running boy님의 프로필 이미지
Running boy

작성한 질문수

질문하기