Page 23 -
P. 23

실행 성능을 개선할 수 있습니다.

                    플레이어 정보를 디스크에 기록하는 시간은 1만분의 1초 정도입니다. 매우 짧은 시간이지만, 상
                    용 게임 서버 입장에서는 엄청난 시간 낭비입니다.                                                       1
                    디스크는 모터로 구성된 기계 장치입니다. 따라서 전자 회로보다 일을 훨씬 느리게 합니다. 물                               멀티스레딩

                    론 최근에는 SSD 디스크를 많이 사용하지만, SSD라고 해도 하드디스크보다 상대적으로 빠를 뿐
                    RAM이나 CPU 안의 캐시(cache) 메모리와 비교했을 때는 훨씬 느립니다.

                    하드디스크에 플레이어 정보를 액세스하는 데 1만분의 1초라는 의미는 그 처리를 하는 데 1초에
                    1만 번 이상은 할 수 없다는 것입니다. 일인칭 슈팅(First-Person Shooter, FPS) 게임은 클라이언트 하
                    나에 초당 30번의 요청을 처리해야 합니다. 이러한 클라이언트가 서버 기기에 1만 개 접속한다고

                    생각해 보세요. 이 서버는 초당 30   10,000 = 30만 번의 처리를 해야 합니다.
                                               *
                    서비스를 오픈한 직후 플레이어들이 순식간에 우르르 게임에 접속한다면 어떻게 될까요? 즉, 1만

                    분의 1초가 걸리는 일이 엄청나게 몰리는 상황입니다. 최악의 경우 30만 번을 처리해야 할 서버가
                    초당 1만 번밖에 처리하지 못하는 상황까지 이릅니다.

                    따라서 1만분의 1초라는 매우 긴 시간을 효율적으로 활용하려면 멀티스레딩을 하든지 비동기 프
                    로그래밍을 해야 합니다(비동기 프로그래밍은 뒤에서 다시 설명하겠습니다).




                    1.3.3  기기에 있는 CPU를 모두 활용해야 할 때


                    2000년 중반까지는 CPU의 실행 속도, 즉 클록 수가 계속 증가했습니다. 하지만 그 이후부터는

                    CPU의 클록 수 대신 CPU 코어(core) 개수만 증가하고 있습니다. CPU가 처리할 수 있는 기능(예
                    를 들어 특정 수학 연산을 하드웨어에서 직접 한다든지 하는 기능)들만 추가되고 있을 뿐입니다.
                    정작 제일 중요한 CPU 자체 속도는 증가하지 못했습니다. 현재 CPU 속도는 4GHz 벽을 허물지
                    못하고 있습니다.

                    이는 프로그램 개발자 측면에서 즐거운 일이 아닙니다. 기본적으로 스레드는 코어를 하나만 사용
                    합니다. 다시 말해서 싱글스레드 프로그램은 컴퓨터의 CPU 코어 개수와 상관없이 1개만 씁니다.

                    여러분 서버가 8코어 CPU를 장착했는데, 싱글스레드로 게임 서버를 만든다면 서버는 전체 연산
                    성능의 1/8만 사용할 것입니다.
                    실험해 봅시다. 다음 코드는 소수(2, 3, 5, 7처럼 1과 자기 자신을 제외한 나머지 숫자로는 나뉘지

                    않는 정수)를 찾아내서 출력하는 프로그램입니다.


                                                                                                  031
   18   19   20   21   22   23   24   25   26   27   28