강의

멘토링

커뮤니티

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

넘블님의 프로필 이미지
넘블

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동

Job #3

잡큐단위 내부에서 잡큐호출

해결된 질문

작성

·

16

0

이미 잡큐로 넘긴 일감안에서 함수호출을 일감으로 넘기는 구조에 대해서 의문이 생겼습니다

image.png

( Enter를 DoAsync로 호출했는데, 내부에서 다시 room함수를 DoAsync로 호출한 상황 )

 

제가 먼저 고민해본 결과는

  1. 어차피 일감으로 넘겼으니 동기로 바로 호출해서 순서도 지키고 괜찮을 것 같다.
    -> 다만, 동기 호출이 내부에서 반복되어 오래 걸릴경우 스레드가 잡혀있을 수 있음
    ( 실행시간을 정해줬다 하지만 동기호출이 반복될 경우 )

  2. 내부 함수 호출도 잡큐단위로 넘기면 GlobalQueue로 스레드 일감 분배되고 좋을 거 같다.
    -> 다만, 바로바로 처리하지 않을 수 있기에 순서(?) 문제가 생길 것 같다.

엄청 무거운 뭐 길찾기라던지의 작업이 아닌이상 그냥 동기 호출하고, 무거운것만 다시 잡큐로 넘기는게 좋은 방법이라는 생각도 들기도 하고
그냥 에라 모르겠다 싹다 동기 or 잡큐로 넘기기 방식도 있을거 같은데 강사님의 의견이 궁금합니다.

 

답변 2

0

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

네 뭐 초반엔 고민거리이긴 한데,
장단점이 상황에 따라 다르기 때문에
나중에 가면 그냥 그날 그날 기분에 따라(?) 처리합니다 ㅎㅎ

넘블님의 프로필 이미지
넘블
질문자

오호.... 흥미롭군요...

0

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

잡큐 내에서 다시 잡큐를 호출하는 구조 관련하여 고민하시는 부분에 대해 설명드리겠습니다. 잡큐 시스템을 유연하게 활용하는 방법은 성능과 안정성을 동시에 고려해야 하는 중요한 과제입니다.

1. 동기 호출

  • 장점: 동기 호출을 통해서는 일의 순서가 보장되므로, 로직 수행의 완결성과 일관성을 유지할 수 있습니다. 특히 작업이 가벼운 경우에는 각잡의 완료를 빠르게 기대할 수 있습니다.
  • 단점: 하지만 동기 호출이 여러 번 반복되거나 시간이 오래 걸리는 경우에는 해당 스레드가 다른 일감을 수행하지 못하는 상황이 발생할 수 있습니다. 이는 성능에 부정적인 영향을 미칠 수 있습니다.

2. 잡큐로 재할당

  • 장점: 잡큐로 재할당하는 경우, 스레드 풀의 여유 있는 리소스를 활용해 비동기적으로 작업을 분배할 수 있다는 장점이 있습니다. 특히 시간이 오래 걸리는 작업이나 병렬 처리가 효율적일 때 유용합니다.
  • 단점: 그러나 잡큐로 넘길 경우, 작업의 순서가 보장되기 어렵고 다른 일이 우선 처리되어야 하는 경우 문제가 될 수 있습니다.

추천 방법

적절한 균형 잡기:
- 가벼운 작업은 동기 호출을 통해 바로바로 처리하며, 주요 순서를 유지하는 것이 바람직합니다.
- 반면, 무거운 작업은 잡큐로 넘겨서 시스템의 전반적인 성능 향상을 꾀하는 것이 좋습니다.
- 또한, 특정 작업의 복잡성과 실행 시간을 사전에 파악하여 전략적으로 큐에 대한 처리를 다르게 설정할 필요가 있습니다.

특정 시나리오에 따라 잡큐 운영 정책을 세우고 시험하는 것이 중요합니다. 게임 개발에서는 이러한 설계 결정이 게임의 반응성과 성능에 큰 영향을 미칠 수 있으므로, 지속적인 모니터링과 조정이 필요합니다.

추가적으로 비슷한 주제를 다룬 일부 토론을 보시면 도움이 될 것입니다:
- 이중 Job 캡슐화는 오히려 위험한것이 아닌지요??
- JobQueue 사용에 대한 질문

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

넘블님의 프로필 이미지
넘블

작성한 질문수

질문하기