Product-3

3. 고성능 서버

멀티코어를 최대한 활용하는 Thread Pool

  • 동시다발적으로 발생하는 각종 이벤트들을 Thread Pool을 사용하여 병렬적으로 처리합니다.
  • Thread Pool은 내부 네트워크용과 유저 콜백 2가지 용도로 나뉘어져 사용자의 실수로 인한 네트워크 병목을 방지 할 수 있습니다.
  • 원한다면 하나의 Thread Pool을 공용으로 쓰거나 아예 Thread Pool을 사용하지 않는 등 유연한 커스터마이징이 가능합니다.

효율적인 I/O 전략 사용

  • 내부 연산에 비해 매우 느린 I/O 작업은 보다 신중하고 스마트하게 수행해야 합니다.
  • 멀티캐스팅을 할 때, 서버가 일일이 송신을 수행하지 않고 P2P 정보를 활용하여 라우팅을 시키는 것이 나은 경우가 있습니다. 메시징 시 이 기능을 사용하도록 선택 할 수 있습니다.
  • 캐릭터의 위치 정보와 같은 데이터는 ProudNet의 Unique ID 기능을 활성화하여 유효한 최신의 값만 보내게 합니다.

그 외 각종 노력들

  • 최소한의 Kernel-User Mode 전환
    서버 운영체제에서 TCP, UDP 패킷 처리를 위해 kernel-user mode 전환이 발생합니다.
    이는 많은 처리 시간을 소모하면서 서버 성능을 떨어뜨립니다.
    ProudNet은 이를 최소화하였습니다.
  • 2가지 Thread Pool Mode
    게임 서버 개발자의 실수 또는 게임 로직의 구조적 문제 때문에 클라이언트의 접속 장애가 발생할 수 있습니다. ProudNet은 이러한 문제를 방지하기 위해 user routine과 network I / O routine을 서로 다른 thread pool에서 처리하는 기능을 제공합니다. 또한 이 기능을 끌 수 있는 옵션 또한 제공합니다.
  • 자유로운 Thread Pool 관계 구성
    분산 서버 구성에서 thread pool과 서버 인스턴스 간 관계를 일대다 구조로 만드는 것은 쉽지 않습니다. 하지만 이것은 효율적인 서버 성능을 위해 필요하며, 이것이 없을 경우 kernel time이 상승하면서 서버의 성능이 떨어질 수 있습니다. ProudNet은 thread pool과 서버 인스턴스 간 관계를 사용자가 원하는 대로 맺을 수 있도록 구성되어 있으며, 최소한의 kernel time을 유지하면서 고성능 게임 서버를 개발할 수 있게 해줍니다.