Skip to content

Thread

스레드는 프로세스 내에서 실행되는 흐름의 단위이자, CPU 스케줄링의 기본 단위다.

  • 과거의 운영체제에서는 프로세스 하나가 하나의 실행 흐름을 가짐
  • 현대 운영체제에서는 하나의 프로세스가 여러 개의 스레드를 가져 멀티스레딩(Multithreading) 지원

스레드의 가장 큰 특징은 프로세스 내의 자원을 공유하여 효율적인 자원 관리와 데이터 통신을 가능하게 하지만, 동기화 문제를 유발하는 원인이 되기도 한다.

  • 공유 영역: Code, Data, Heap 영역은 프로세스 내 모든 스레드가 공유
    • 파일 디스크립터(열린 파일 목록)나 전역 변수 등을 손쉽게 공유 가능
  • 독립 영역: Stack, PC(Program Counter), 레지스터(Register)는 스레드마다 독립적으로 할당
    • 각 스레드가 독립적인 함수 호출과 실행 흐름을 가지기 위함
graph TB
subgraph Process [프로세스 메모리 공간]
direction TB
subgraph Shared [공유 자원]
Code[Code 영역]
Data[Data 영역]
Heap[Heap 영역]
end
subgraph Threads [스레드 실행 흐름]
direction LR
subgraph T1 [스레드 A]
Stack1[Stack]
Reg1[PC / Register]
end
subgraph T2 [스레드 B]
Stack2[Stack]
Reg2[PC / Register]
end
subgraph T3 [스레드 C]
Stack3[Stack]
Reg3[PC / Register]
end
end
end

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 그 자원을 활용하는 실행의 단위다.

구분프로세스(Process)스레드(Thread)
정의실행 중인 프로그램(자원 할당의 단위)프로세스 안의 실행 흐름(스케줄링의 단위)
메모리독립된 메모리 영역(Code, Data, Heap, Stack)Stack만 독립, 나머지는 프로세스 내 공유
통신 비용높음(IPC 필요: 파이프, 소켓 등)낮음(공유 메모리(Data, Heap) 직접 접근)
문맥 교환오버헤드 큼(캐시 초기화 등 비용 높음)오버헤드 작음(메모리 공유로 캐시 적중률 높음)
안정성한 프로세스 종료가 다른 프로세스에 영향 없음한 스레드의 오류가 프로세스 전체를 종료시킬 수 있음
  • 멀티 프로세스(Multi-Process): 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업 수행(예: 크롬 브라우저의 각 탭)
    • 장점
      • 독립된 구조로 인해 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 높은 안정성 제공
    • 단점
      • 문맥 교환(Context Switch) 과정에서 캐시 메모리 초기화 등 무거운 작업이 필요해 오버헤드 발생
      • 프로세스 간 통신(IPC)을 위해 복잡한 기법(파이프, 소켓 등)을 사용해야 하므로 통신 비용이 높음
  • 멀티 스레드(Multi-Thread): 하나의 프로그램을 여러 개의 스레드로 구성하여 각 스레드가 작업 수행(예: 웹 서버 요청마다 각 스레드가 처리)
    • 장점
      • 힙 영역 등을 통해 데이터를 직접 공유하므로 통신 방법이 간단하고 통신 비용이 낮음
      • 문맥 교환 시 스택 영역 등 일부만 저장/복구하면 되어 오버헤드가 적음
    • 단점
      • 여러 스레드가 공유 자원에 동시에 접근 시 데이터 정합성 문제 발생 가능
      • 하나의 스레드에서의 치명적인 오류가 프로세스 전체에 영향을 미칠 수 있음

Last updated:

Operating System