Program vs Process vs Thread

열수철·2024년 12월 25일

1. 프로그램(Program)

프로그램은 디스크 등 저장 매체에 실행 파일 형태로 존재하는 소프트웨어
아직 메모리에 로드되어 실제 실행 중인 상태가 아니므로, CPU 등 시스템 자원을 할당 X

  • 예시: myapp.exe, python main.py, hello.c(컴파일 전·후) 등
  • 컴파일 또는 인터프리터를 통해 실행 가능한 상태의 코드 묶음을 통칭

2. 프로세스(Process)

프로그램이 실제로 메모리에 로드되고 운영체제(OS)에 의해 실행되는 상태
운영체제는 프로세스별로 고유한 메모리 공간(Code/Data/Stack/Heap 등) 및 필요한 자원(파일 디스크립터, 소켓 등)을 할당하여 관리.

  1. 독립적 메모리: 다른 프로세스와 기본적으로 메모리를 공유하지 않으므로, 안정성이 높습니다.
  2. 프로세스 간 통신(IPC): 프로세스 간에는 파이프, 소켓, 메시지 큐 등 별도의 통신 기법을 사용, 이 과정에서 오버헤드 발생 가능
  3. 최소 1개 이상의 쓰레드(메인 쓰레드): 프로세스에는 최소 하나 이상의 쓰레드가 존재

3. 쓰레드(Thread)

쓰레드는 프로세스 내부에서 실행 흐름을 나눈 가장 작은 단위
하나의 프로세스는 여러 개의 쓰레드를 가질 수 있으며, 이를 통해 병렬(혹은 동시) 처리 효율 상승

  1. 공유 메모리: 동일 프로세스 내의 쓰레드들은 전역 메모리, 힙 메모리 등을 공유
  2. 경량성: 쓰레드 생성·종료에 대한 오버헤드는 프로세스 생성·종료보다 상대적으로 작음
  3. 동기화 이슈: 여러 쓰레드가 동시에 같은 자원에 접근하므로, 뮤텍스(Mutex), 세마포어(Semaphore) 등의 동기화 기법을 적용

4. 비교 표

아래 표는 프로그램, 프로세스, 쓰레드의 주요 특징을 간략히 비교한 것입니다.

구분프로그램(Program)프로세스(Process)쓰레드(Thread)
정의/상태디스크 등에 저장된 실행 가능 파일 (정적 상태)운영체제에 의해 메모리, 자원 등이 할당된 실행 중인 작업 (동적 상태)프로세스 내부의 실행 흐름을 나눈 단위
메모리 구조메모리 사용 X독립된 메모리 영역(Code/Data/Stack/Heap)프로세스의 전역/힙 메모리를 공유하되, 각 쓰레드별 스택 할당
실행 가능 여부직접 실행 불가 (OS 할당 전)운영체제 스케줄링 대상으로 CPU 시간을 할당받아 동작프로세스 내에서 멀티쓰레드로 동작 (CPU 스케줄링 공유)
통신 방식해당 없음 (파일 형태)프로세스 간 통신(IPC) 필요 (파이프, 소켓, 메시지 큐 등)공유 메모리를 통해 빠른 통신 가능, 단 동기화 기법 필요
예시hello.exe, python main.py실행 중인 브라우저 프로세스, 게임 프로세스, 백그라운드 데몬 등브라우저 탭 쓰레드, 게임 렌더링 쓰레드, 백그라운드 계산 쓰레드 등

전체 흐름 정리


참고 및 이미지 출처
https://en.wikipedia.org/wiki/Thread_(computing)

profile
그래픽스, 수학, 물리, 게임 만세

0개의 댓글