프로그램은 디스크 등 저장 매체에 실행 파일 형태로 존재하는 소프트웨어
아직 메모리에 로드되어 실제 실행 중인 상태가 아니므로, CPU 등 시스템 자원을 할당 X
myapp.exe, python main.py, hello.c(컴파일 전·후) 등 프로그램이 실제로 메모리에 로드되고 운영체제(OS)에 의해 실행되는 상태
운영체제는 프로세스별로 고유한 메모리 공간(Code/Data/Stack/Heap 등) 및 필요한 자원(파일 디스크립터, 소켓 등)을 할당하여 관리.
쓰레드는 프로세스 내부에서 실행 흐름을 나눈 가장 작은 단위
하나의 프로세스는 여러 개의 쓰레드를 가질 수 있으며, 이를 통해 병렬(혹은 동시) 처리 효율 상승
아래 표는 프로그램, 프로세스, 쓰레드의 주요 특징을 간략히 비교한 것입니다.
| 구분 | 프로그램(Program) | 프로세스(Process) | 쓰레드(Thread) |
|---|---|---|---|
| 정의/상태 | 디스크 등에 저장된 실행 가능 파일 (정적 상태) | 운영체제에 의해 메모리, 자원 등이 할당된 실행 중인 작업 (동적 상태) | 프로세스 내부의 실행 흐름을 나눈 단위 |
| 메모리 구조 | 메모리 사용 X | 독립된 메모리 영역(Code/Data/Stack/Heap) | 프로세스의 전역/힙 메모리를 공유하되, 각 쓰레드별 스택 할당 |
| 실행 가능 여부 | 직접 실행 불가 (OS 할당 전) | 운영체제 스케줄링 대상으로 CPU 시간을 할당받아 동작 | 프로세스 내에서 멀티쓰레드로 동작 (CPU 스케줄링 공유) |
| 통신 방식 | 해당 없음 (파일 형태) | 프로세스 간 통신(IPC) 필요 (파이프, 소켓, 메시지 큐 등) | 공유 메모리를 통해 빠른 통신 가능, 단 동기화 기법 필요 |
| 예시 | hello.exe, python main.py 등 | 실행 중인 브라우저 프로세스, 게임 프로세스, 백그라운드 데몬 등 | 브라우저 탭 쓰레드, 게임 렌더링 쓰레드, 백그라운드 계산 쓰레드 등 |

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