돌려 말하면, 싱글스레드나 뮤텍스 잠금 범위가 너무 넓은 서버 1이 1초 동안 처리할 수 있는 일의 최대 개수는 1초를 40~120마이크로초로 나눈 값인 8300~2만 5000회입니다. 여기까지가 한계라는 의미입니다. 여러분 게임 클라이언트가 서버에 1초에 메시지를 20번 던지고 있다 가정합시다. 서버가 이 메시지를 모두 처리할 수 있다면, 8300~2만 5000을 20으로 나눈 값인 410~1250명의 동시접속자까지만 처리할 수 있다는 의미입니다. 요즘 게임 서버가 처리할 수 있는 성능을 고려하면 굉장히 낮습니다.
이 문제를 개선하려면 서버 1은 멀티스레드 혹은 멀티프로세스로 작동하거나 뮤텍스의 잠금 범위를 좁혀야 합니다. 아니면 서버 1과 서버 2 사이의 네트워크 레이턴시를 최소한으로 줄이는 다른 방법을 찾아야 합니다. Inf iniband로 묶는다든지 말이죠.
그런데 앞서 예로 든 몬스터 사냥 로직은 매우 단순한 수준입니다. 일반적인 수준의 서버 1은 이보다 더 자주 서버 2와 대화해야 할 것입니다.
처리 성능 병목 문제는 조금만 증가해도 전체 성능이 급격히 떨어집니다. 이를 암달의 법칙이라고 합니다.
▲ 그림 9-15 병렬로 처리하지 못하는 시간(붉은색)의 비중이 클수록 병렬 처리 효과는 크게 감소