[Server] #15-2. 멀티쓰레드 입문

프로세스 vs 스레드

  • 면접 단골 질문이니 꼭 이해하고 넘어가기!
  • 프로세스 : 운영체제에서 실행되는 독립적인 프로그램 단위.
  • 스레드 : 프로세스 내에서 실행되는 작업 단위로, 여러 개의 스레드가 하나의 프로세스를 공유할 수 있다.

멀티 스레드

  • 멀티 코어 : 하나의 CPU 안에 여러 개의 코어가 있어, 각 코어가 독립적으로 작업을 수행할 수 있다.
  • 멀티 스레드 : 하나의 프로그램(프로세스) 내에서 여러 개의 스레드가 실행된다.

스레드와 CPU 코어 배치

멀티 스레드 환경에서는 여러 개의 스레드(직원)가 존재하고, CPU 코어(작업 실행권)가 이들을 배치하여 일을 처리한다.


멀티 스레드의 필요성

  • 배틀그라운드(FPS)처럼 단일 스레드로 운영되는 경우도 있지만, MMORPG와 같은 대규모 게임에서는 멀티 스레드가 필수적이다(직원 한 명이 모든 일을 처리하지 못함).
  • 단일 스레드는 작업량이 많아지면 한계에 부딪히므로, 여러 개의 스레드를 배치해 부하를 분산해야 한다.

스레드의 개수와 성능 문제

스레드는 많을수록 좋을까?

  • 스레드를 많이 생성하면 이론적으로 성능이 향상될 것 같지만, 실제로는 한 작업에 너무 많은 스레드가 몰려 다른 작업이 제대로 처리되지 않는 단일 스레드 보다 낮은 성능을 보이는 등의 문제가 발생할 수 있다.

문맥 교환(Context switching)

  • 컴퓨터에서 동시에 처리할 수 있는 최대 작업 수는 CPU core 수와 같다. 만약 코어 수보다 많은 스레드가 실행되면, 각 코어가 정해진 시간 동안 작업을 번갈아가며 수행해야 한다.
  • 스레드가 서로 교체될 때 스레드 간의 문맥 교환이 발생한다.
  • 문맥교환이란? 현재까지의 작업 상태나 다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업이다.
  • 문맥 교환에 걸리는 시간이 커질수록 멀티 스레드의 효율은 저하된다. 오히려 많은 양의 단순한 계산은 싱글 스레드가 더 효율적일 수도 있다.

출처 Rookiss님 게임 프로그래머 입문 올인원

Categories:

Updated:

Leave a comment