Room마다 Thread를 만들기
459
10 câu hỏi đã được viết
안녕하세요 루키스님 덕분에 서버개발자로 취업하였습니다.
루키스님의 강의를 체화하기 위해서 간간히 코드를 보면서 잊어먹을랑 말랑한 것들을 다시 강의로 듣곤 합니다
그러다가 아래 코드를 보면서 문득 의문이 들었는데요.
while(true)
{
GameLogicTask.Instance.Update()
}게임 실행 시 위 로직을 타면서 메인쓰레드 하나서 모든 Room의 Update를 담당하고 있는데
Room에 유저수가 많아지게 되면 메인 쓰레드에 점점 부하가 더 많아지는게 아닌가해서 질문을 드립니다.
메인쓰레드 부하가 많아지면 컨텍스트 스위칭이 생겨도 Room마다 Thread를 생성하여
남은 자원을 Update가 바쁘게 돌아가는 Room쪽에 쓰레드를 조금 더 할당해 주어도 될까요?
(밑에 질문에 답변해 주셨네요 ^^; Room마다 쓰레드를 더 만들겠습니다.)
심리스 월드에서 Actor마다 JobSerializer를 할당하는 방법을 쓰면,
쓰레드를 너무 많이 만들게 될것 같은데 컨텍스트 스위칭 외에 또 생기는 성능적인 사이드 이펙트를 뭘 또 고려하면 좋을까요?
Actor마다 JobSerializer를 쓴다고 하면 Actor단일로서는 lock을 걸지 않아도 되지만
서로 상호작용이 일어나는 상황에서는 어쩔수 없이 lock을 걸어줄수 밖에 없을 것 같은데, 그러면 결국은 JobSerializer를 쓰지 않아도 되지 않나 부족한 지식으로 어렴풋이 생각이 듭니다.
또한 JobSerializer를 Flush 하기 위해선 Actor마다 while(true) 루프를 돌면서 계속해서 잤다가 깼다가 확인 하는 과정과 컨텍스트 스위칭비용이 점점 더 늘어날 것 같은데 이런 비용을 감안하면서 사용하는 것인지요. 아니면 딱히 신경쓰지 않아도 될만한 부하인지 궁금합니다.
Câu trả lời 2
1
쓰레드를 늘리는 것은 맞지만,
방이 100개라고 쓰레드를 100개를 만들면 곤란합니다.
기본적으로 적정 쓰레드 개수는 CPU 코어 * 1~1.5 정도이고, 그 이상은 손해에 가깝습니다.
배분 관련 내용은 C++ 서버 내용에서 잠시 다뤘습니다.
또한 메인 쓰레드에서 게임로직만 담당하게 해도, 동접 2000 정도의 MMO를 돌릴 수 있습니다.
중소기업에서 만든 MMO는 실제로 그렇게 하는 경우가 꽤 있는데
다만 메인 쓰레드에서 너무 괴랄한 길찾기나 AI를 돌리지 않으면 됩니다.
질문 있습니다.
0
42
2
심리스 존 방식 난이도
0
86
2
RewardPlayer함수 에 대해서
0
55
1
모바일 데이터 환경에서의 렉 현상 문의 드립니다.
0
88
2
화살 처리 관련 질문이 있습니다!
0
116
1
part1~9 모두 완료하였습니다.
0
209
2
이번 수업 특히 좋았습니다
0
149
1
화살과 몬스터 버그와 관련한 질문입니다
0
169
3
DummyClient cpu스펙 질문있습니다.
0
120
2
InventoryManager 클래스에서 사소하지만 꼭 알고 싶은 사항이 있습니다
0
111
2
FANTASTIC UI STARTER PACK이 없네요..
0
119
1
면접 질문 드립니다.
0
146
1
로그인 정보 암호화는 어떻게 하나요?
0
231
2
조건식 중단점을 걸면 문제가 발생합니다
0
133
0
GenProto.bat 파일 오류
0
171
2
코드변경을 하면 오류가 생기는데요
0
188
2
아이템 슬롯 선적용에 대한 질문입니다
0
193
1
M1 M2강의의 경우 어느정도 수준이 필요한가요?
0
308
1
3~4일 간격으로 CPU 99% 사용되는 문제
0
421
2
JobSerializer 관련
0
287
1
3D 게임 이동 동기화
0
462
2
GameLogic 쓰레드에서 모든 GameRoom을 처리하나요?
0
255
1
Async와 Job방식의 차이가 궁금합니다.
0
294
1
EF사용시 async사용
0
254
1

