ch1-1. 멀티 쓰레드

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

📌 멀티 쓰레드 프로그래밍

🚀 멀티 쓰레드

서버는 멀티 쓰레드를 사용한다.

CPU 코어 하나당 하나의 쓰레드만을 실행시킬 수 있다. 그렇기 때문에 비동기적으로 아주 아주 빠르게 눈 깜짝할 새 동안 CPU 코어는 쓰레드를 한번씩 실행시킨다. A 쓰레드 잠깐 일시켰다가 중간에 B 쓰레드로 옮겨가서 일하고 이런 식으로 일한다. 그래서 마치 병렬적으로 동시에 실행되는 것처럼 보이게 된다. 컴퓨터에서 동시에 여러 프로그램이 병렬적으로 실행되고 있는 것 같지만 사실 그런 것처럼 CPU 가 왔다갔다 이 쓰레드 저 쓰레드 옮겨 다니면서 일을 하고 있는 것이다.

  • 운영체제 모드
    • 1️⃣ 유저 영역 : 운영 체제에서 유저가 사용하는 영역
    • 2️⃣ 커널 모드 : 운영 체제의 핵심적인 영역. 스케줄링을 담당한다. 다음 프로그램 어떤거 실행시킬지, 어떤 쓰레드를 실행해야 할지. 정해놓은 기준으로 우선순위 부여.

멀티 코어는 CPU 코어가 여러개인 환경을 말한다. 때문에 코어 수에 맞게 여러 쓰레드들을 진짜로 동시에! 병렬적으로! 실행시킬 수 있다. 근데 쓰레드를 늘린다고 성능이 좋아지는건 아니다. 왜냐면 CPU 코어가 A 쓰레드를 사용하다가 B 쓰레드로 옮겨가는 과정의 부하가 크기 때문이다. 그래서 딱 한 코어당 한 쓰레드만 실행시키는 것이 가장 이상적이다.

  • 쓰레드 별로 할 일을 부여할 수 있다.
    • 게임 로직 담당하는 쓰레드
    • 클라이언트 세션 담당하는 쓰레드
    • DB 담당는 쓰레드
  • 쓰레드들은
    • 힙, Data 영역은 모든 쓰레드들이 공유해서 사용한다. (문제 O 얽히고 설킬 수 있음)
    • 스택은 각 쓰레드들마다 고유한 스택을 따로 가진다. (문제 X)

한 쪽을 까먹거나 혹은 한 쪽으로 너무 쏠린다던가 하지 않도록 쓰레드들을 얽히지 않게 효율적으로 관리하는게 관건이다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

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

댓글 남기기