실시간 게임서버 최적화 전략
YouTube (발표자 업로드본)
이 방식이 일반적인 스타일은 아님
일반적인 게임 서버는 능동적인 서버
- 상태를 서버의 메모리에
- DB는 보조수단
- 클라이언트 요청 없어도 서버에서 상태 유지/변경
- 게임 루프 필요
소극적으로 능동적 => 클라이언트의 동작을 일부 시뮬레이션 => 핵 우려
적극적으로 능동적 => 클라이언트의 동작을 그대로 시뮬레이션 => 접속한 클라이언트만큼 부하 증
응답성 향상 기법
- 비동기 처리
- Thread Pool을 이용한 병렬 처리
- 코드 최적화
비동기 처리 - 싱글 스레드 => 작업들을 나눠서 실행
비동기 처리 - 멀티 스레드 => 별도의 worker 스레드에 작업을 할당
응답성 향상
- 범용 Heap 보다는
- Stack 사용
- 고정 사이즈 memory pool (병합 기능 x)
- 적절한 동기화 객체 선택
- SIMD 최적화의 경우 전체적으로 최대 30% 성능 향상 기대
발표자의 프로젝트에서는 1개의 메인 스레드와 N개의 보조 스레드 풀을 사용함
DB Access는 비동기로 처리하고 있
멀티 스레드를 적용할 때 고려해야할 점
- 동기화 비용은 생각보다 크다
- 처리량의 한계로 응답성이 떨어지는 경우만 사용
- 활성화된 core 개수에 따라 turbo boost가 꺼지므로 예성보다 더 성능이 안 나옴