[게임 서버] 1.12 스레드 풀링

업데이트:     Updated:

카테고리:

태그:

이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자

📦 1. 멀티스레딩

👉🏻 항목 12: 스레드 풀링

멀티스레드 게임 서버를 만들 때, 스레드는 몇 개를 만들어야 할까?

❌ 클라이언트마다 스레드를 만들면?

클라이언트가 5000명이라면, 스레드도 5000개라고 가정하자.

이 방식은 다음과 같은 문제를 일으킨다:

  • 메모리 낭비: 스레드 하나당 스택 등 자원 사용
  • 컨텍스트 스위치 증가: CPU가 스레드 전환에 시간 소모

    실제 작업보다 스레드 전환 비용이 더 큼

그래서 요즘은 스레드 풀링을 사용한다.



✅ 스레드 풀링(Thread Pooling)

미리 스레드를 여러 개 만들어두고,
작업이 들어오면 대기 중인 스레드에게 할당해서 처리하는 방식

[문]   [문]   [문]   [문]   [문]
       ↑
    (두 번째 문이 열려 있음)

사람1: 두 번째 문이 비었다! 저기 가야지~
사람2: 아... 급하다
사람3: 아... 급하다

문 = 스레드, 사람 = 이벤트



⚖️ CPU 개수와 스레드 개수의 관계

1️⃣ CPU > 스레드

  • 예: CPU 8코어, 스레드 6개
  • 컨텍스트 스위치 없음
  • 스레드 병렬 실행 6개
  • CPU 자원을 100% 활용하지 못함

2️⃣ CPU = 스레드

  • 예: CPU 8코어, 스레드 8개
  • 컨텍스트 스위치 없음
  • 병렬 실행 8개
  • CPU 자원 100% 활용

3️⃣ CPU < 스레드

  • 예: CPU 8코어, 스레드 10개
  • 컨텍스트 스위치 발생
  • 오히려 처리 속도 나빠질 수 있음
  • 디바이스 타임(IO 등)도 영향을 줌

💡 결론: 일반적으로 CPU 개수보다 스레드 개수가 적거나 같은 게 좋다.



🧮 스레드 개수는 어떻게 정할까?

스레드는 자주 잠을 잔다 (대기 상태)

→ 이럴 땐 CPU는 놀고 있다.
→ CPU를 더 잘 쓰기 위해 스레드 수를 늘리는 것이 좋다.

예시:

  • 총 처리 시간 중
    • 25%는 CPU 연산
    • 75%는 IO 등 대기

      스레드 수 = CPU 개수 × 4 (또는 대략 3~4배)



💬 스레드 개수 결정 규칙

상황 권장 스레드 수
CPU 작업 위주 CPU 개수와 동일
IO 대기 많은 경우 CPU 개수보다 2~4배 많게



🧐 정리

  • 스레드 풀링은 서버 성능을 안정적으로 유지하는 핵심 전략
  • 스레드 개수는 작업 특성에 따라 조절해야 한다
    • CPU 연산 위주: CPU 개수와 동일하게
    • IO 대기(디바이스 타임) 많은 경우: 더 많은 스레드로 커버

GameServer 카테고리 내 다른 글 보러가기

댓글남기기