해결된 질문
작성
·
192
·
수정됨
0
안녕하세요. 강의 다 듣고 포트폴리오 프로젝트를 만들면서 JobSerializer 관련해 궁금증이 생겨 질문 드립니다.
강의에서 채택한 방식은
GameRoom 단위로 JobSerializer를 두는 방식으로 이해했습니다.
그렇다면 Zone은 비대해진 GameRoom의 커버영역을 논리적으로 잘게잘게 쪼개서 최적화 하는 것이라고 보면 될까요? (만약, 좁은 영역을 다루는 보스방 같은 곳은 BossRoom 같이 새로 만들어서 Zone 없이 구현하면 되는건가요?)
GameRoom을 여러 개로 나누는 시점은 독립적인 공간 (이를테면 보스방, 건물내부 등)이 생길 때 인가요?
강의에서는 GameLogicTask에서 모든 GameRoom에 대한 Flush를 하였는데, 메인월드(대륙)처럼 처리해야 하는 영역이 방대한 GameRoom에 대해서는 Thread 1개 전체를 할당해 주는 등 각 GameRoom의 무게(?) 에 따라서 Thread 1개당 몇개의 GameRoom을 Flush 할 것인지 정하면 되는 것인가요?
만약, Object 단위로 JobSerializer를 둔다면 Thread 하나당 담당할 Object 개수를 정해서 하는 건가요?
여담으로 예전에 면접에서 동접자수에 관련된 질문을 받았는데.. CPU 성능에 따라 천차만별이라 크게 의미 있는 질문인가 싶지만 이런 지표를 뽑아내려면 정확히 어떤 기준으로 뽑아내는 건가요? (대충 눈으로 끊김 없는 한계 동접자 수, CPU 로드율 일정% 이상 등등..)
감사합니다!
답변 1
1
Zone 분할은 예시일 뿐 자유롭게 구상하시면 됩니다.
GameRoom은 디아블로처럼 독립적인 방을 얘기합니다. 심리스 MMO라면 룸이라는 개념이 없죠
게임 로직을 단일 쓰레드로 가는 경우도 있고, Actor 단위로 JobQueue를 두는 경우도 있습니다.
아닙니다. 그때 그때 가용 가능한 쓰레드가 처리하는 것입니다.
동접 관련 질문은 대부분 헛소리입니다.
채팅 서버라면 동접 20만도 가능하겠고
스킬을 빡세게 돌린다면 5천도 간당간당할 수 있겠죠.
더미를 많이 붙이는 식으로 스트레스를 해봤따 정도면 충분합니다.
물론 현실에선 쓰레드를 20~30개 정도 굴릴 수 있습니다.
그러면 게임 로직을 더더더 세분화하면 좋긴 하겠지만
서로 완전 독립적인 영역이 아니라면,
어떻게든 동기화가 필요해지므로 상황이 복잡해집니다.
요즘 트렌드는 대륙별로 하나의 게임 로직 쓰레드 처리라고 보지만
(특히 모바일 MMO에선 빨리 개발해야 하므로)
서버 구조는 원래 다양한 방법이 있긴 합니다.
답변 감사합니다.
3번은 실전에서 훨씬 좋은 CPU를 사용할테니 서버 CPU를 좀 더 적극적으로 활용하고자 게임 로직을 2개 이상으로 나눠서 각각 배정받은 Thread가 실행하면 되지 않을까? 하는 의미였는데, 이게 서버 성능 향상에는 큰 의미가 없는 건지 궁금합니다!
현재는 ThreadPool과 연관된 부분은 제외하고 총 4개 정도의 Thread를 명시적으로 생성하여 사용하고 있는데, 만약, 강의와 같은 방식으로 쓰레드를 분배한다고 하였을 때, GameLogic에 1개 주던 것을 독립적인 GameRoom끼리 묶어서 Thread를 2~3개 더 분배해도 괜찮지 않을까 궁금했습니다!