프로세스와 스레드

Jaemyeong Lee·2024년 12월 22일

게임 서버1

목록 보기
108/220

레스토랑 비유 (영혼과 로봇)

비유 구성 요소

비유실제 개념
레스토랑프로세스(프로그램)
직원(로봇)스레드
영혼CPU 코어의 실행권 (한 시점에 한 스레드 실행)

동작 원리

  • 한 코어는 같은 순간에 보통 한 스레드만 실행합니다.
  • 실행권이 빠르게 스레드 사이를 옮겨 다니면 "동시에 도는 것처럼" 보입니다.
  • 이 전환 과정을 컨텍스트 스위칭(Context Switch)이라고 합니다.

비유의 한계도 같이 알기

  • 멀티코어에서는 진짜 동시 실행이 가능합니다(착시가 아님).
  • OS 스케줄러는 우선순위, 타임슬라이스, 대기 상태(I/O) 등을 기준으로 실행 대상을 고릅니다.

프로세스 vs 스레드

정의

구분프로세스스레드
정의실행 중인 프로그램 인스턴스프로세스 내부의 실행 흐름
메모리프로세스마다 주소 공간 분리같은 프로세스의 코드/힙/전역 데이터 공유
생성/전환 비용상대적으로 큼상대적으로 작음
안전성다른 프로세스와 격리 강함공유 자원 충돌 위험 높음
관계최소 1개 스레드 포함프로세스를 실제로 실행

메인 스레드

  • 프로그램 시작 시 OS가 기본(메인) 스레드를 생성합니다.
  • C/C++ 프로그램에서는 보통 이 스레드가 main()에서 시작합니다.
  • 별도 스레드를 만들지 않았다면 모든 코드는 메인 스레드에서 실행됩니다.

역사적 맥락

  • 도스 시절에는 단일 작업 모델이 일반적이었습니다.
  • 현대 OS는 다중 프로세스/다중 스레드를 스케줄링하여 동시 실행을 제공합니다.

CPU 코어와 실행권

CPU 코어 1개

  • 한 시점에 실행 가능한 스레드는 제한됩니다.
  • 나머지 스레드는 Ready 큐에서 대기하다가 차례로 실행됩니다(시분할).

멀티코어

  • 물리 코어 수만큼 병렬 실행 폭이 늘어납니다.
  • SMT/하이퍼스레딩이 있으면 논리 코어 수는 더 많아질 수 있습니다.

코어 수 vs 스레드 수

  • 스레드 수 > 실행 가능한 코어 수면 컨텍스트 스위칭은 계속 발생합니다.
  • 스레드 수를 코어 수와 1:1로 맞추는 것이 항상 정답은 아닙니다.
    • I/O 대기 작업은 더 많은 스레드가 유리할 수 있음
    • CPU 바운드 작업은 과도한 스레드가 오히려 손해

실무 팁:

  • std::thread::hardware_concurrency() 값은 힌트입니다(절대값 아님).

컨텍스트 스위칭 비용

전환 과정

스레드 A → 스레드 B로 전환 시:

  1. A의 상태(레지스터, 실행 위치 등) 저장
  2. B의 저장된 상태 복원
  3. 스케줄러/커널 작업 수행
  4. 캐시/TLB 워밍업 손실 가능

비용의 의미

  • 컨텍스트 스위칭은 공짜가 아닙니다.
  • 스레드를 무작정 늘리면 전환 비용 + 락 경합으로 성능이 하락할 수 있습니다.
  • 특히 CPU 바운드 로직에서 과도한 스레드 증가는 역효과가 흔합니다.

스레드 상태

상태설명
Ready실행 가능하지만 CPU 할당 대기
RunningCPU에서 실행 중
Waiting(Blocked)I/O, 락, 이벤트 대기
Terminated실행 종료

전이 감각:

  • Ready -> Running : 스케줄러가 CPU 할당
  • Running -> Waiting : I/O/락 대기 진입
  • Waiting -> Ready : 대기 조건 충족
  • Running -> Terminated : 함수 종료/스레드 종료

강의 시 유의사항

강조 포인트

  • 면접에서는 "프로세스와 스레드 차이"를 메모리/격리/비용 관점으로 묻는 경우가 많습니다.
  • 비유 설명 후 반드시 실제 OS 용어(스케줄러, Ready/Running/Waiting)로 연결하세요.
  • hardware_concurrency()는 참고값이며 튜닝이 필요하다는 점을 함께 설명하세요.

자주 하는 오해

오해바로잡기
스레드가 많을수록 무조건 빠르다컨텍스트 스위칭/락 경합으로 느려질 수 있음
한 프로세스 스레드는 서로 완전히 독립힙/전역 데이터 공유 -> 동기화 필요
멀티코어면 컨텍스트 스위칭이 사라진다스레드 수가 많으면 여전히 발생

체크 질문 (스스로 답해보기)

  • 프로세스와 스레드의 차이를 "메모리 관점"으로 설명할 수 있는가?
  • CPU 바운드 작업에서 스레드 과다 생성이 왜 느려질 수 있는가?
  • Ready/Running/Waiting 상태 전이를 실제 예시(I/O 대기)로 설명할 수 있는가?

profile
李家네_공부방

0개의 댓글