작성
·
355
·
수정됨
0
안녕하세요 루키스님 덕분에 서버개발자로 취업하였습니다.
루키스님의 강의를 체화하기 위해서 간간히 코드를 보면서 잊어먹을랑 말랑한 것들을 다시 강의로 듣곤 합니다
그러다가 아래 코드를 보면서 문득 의문이 들었는데요.
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) 루프를 돌면서 계속해서 잤다가 깼다가 확인 하는 과정과 컨텍스트 스위칭비용이 점점 더 늘어날 것 같은데 이런 비용을 감안하면서 사용하는 것인지요. 아니면 딱히 신경쓰지 않아도 될만한 부하인지 궁금합니다.