스레드
운영체제에서 `스레드(thread)`는 프로세스를 구성하는 실행 흐름의 단위이다.
하나의 프로세스는 하나 이상의 스레드를 가질 수 있다.
프로세스 = 실행 중인 프로그램
스레드 = 프로세스 안에서 실행되는 흐름
즉, 프로세스가 하나의 실행 공간이라면, 스레드는 그 안에서 실제로 명령어를 실행하는 흐름이라고 볼 수 있다.
단일 스레드 프로세스
하나의 프로세스 안에 실행 흐름이 하나만 있다면 이를 단일 스레드 프로세스라고 한다.
프로세스
└─ 스레드 1

예를 들어 어떤 프로그램이 입력을 받고, 계산을 하고, 결과를 출력한다고 하자.
단일 스레드라면 이 작업들이 하나의 흐름 안에서 순서대로 실행된다.
입력 받기 → 계산하기 → 출력하기
즉, 동시에 여러 작업을 처리하는 구조가 아니라 하나의 흐름을 따라 차례대로 실행된다.
멀티 스레드 프로세스
하나의 프로세스 안에 여러 실행 흐름이 있다면 이를 멀티 스레드 프로세스라고 한다.
프로세스
├─ 스레드 1
├─ 스레드 2
└─ 스레드 3
멀티 스레드 프로세스에서는 프로세스를 이루는 여러 스레드가 동시에 실행될 수 있다.
예를 들어 워드프로세서 프로그램을 생각해보자.
스레드 1: 사용자 입력 처리
스레드 2: 맞춤법 검사
스레드 3: 자동 저장
이 작업들이 모두 하나의 프로세스 안에서 여러 스레드로 나뉘어 실행될 수 있다.
즉, 멀티 스레드는 하나의 프로세스 안에서 여러 작업 흐름을 동시에 처리하기 위한 방식이다.
스레드가 가지는 정보
스레드는 실행 흐름이기 때문에, 실행에 필요한 최소한의 정보를 각자 가지고 있어야 한다.
대표적으로 다음과 같은 정보를 가진다.
스레드 ID
프로그램 카운터
레지스터 값
스택

스레드 ID는 각각의 스레드를 구분하기 위한 식별자이다.
프로그램 카운터는 해당 스레드가 다음에 실행할 명령어의 주소를 저장한다.
레지스터 값은 스레드가 실행 중 사용하던 중간 계산값이나 상태 정보를 저장한다.
스택은 함수 호출, 매개변수, 지역 변수 등을 저장하는 공간이다.
즉, 각 스레드는 독립적인 실행 흐름을 유지하기 위해 최소한의 실행 정보를 따로 가진다.
스레드마다 따로 가지는 것
- 스레드 ID
- 프로그램 카운터
- 레지스터 값
- 스택
스레드가 공유하는 것
스레드는 실행에 필요한 최소 정보는 각자 가지지만, 같은 프로세스에 속한 스레드들은 프로세스의 자원을 공유한다.
예를 들어 같은 프로세스의 스레드들은 다음 자원을 공유할 수 있다.
코드 영역
데이터 영역
힙 영역
열린 파일
입출력 자원
즉, 한 스레드가 파일을 열면 같은 프로세스 안의 다른 스레드도 그 파일에 접근할 수 있다.
이 점이 프로세스와 스레드의 중요한 차이이다.
프로세스끼리는 기본적으로 자원을 공유하지 않는다.
반면 같은 프로세스 안의 스레드끼리는 자원을 공유한다.
프로세스끼리 → 기본적으로 자원 공유 X
스레드끼리 → 같은 프로세스의 자원 공유 O
멀티 프로세스와 멀티 스레드
동일한 작업을 처리하는 방법에는 두 가지가 있을 수 있다.
하나는 같은 작업을 수행하는 프로세스를 여러 개 실행하는 방식이고, 다른 하나는 하나의 프로세스 안에서 여러 스레드를 실행하는 방식이다.
둘 다 여러 실행 흐름을 만들 수 있지만, 자원 관리 방식이 다르다.

멀티 프로세스
멀티 프로세스는 여러 개의 프로세스를 실행하는 방식이다.
프로세스끼리는 기본적으로 독립적인 메모리 공간을 가진다.
따라서 한 프로세스가 다른 프로세스의 자원에 쉽게 접근할 수 없다.
예를 들어 어떤 프로세스를 fork하면, 부모 프로세스의 코드 영역, 데이터 영역, 힙 영역 등이 복제되어 자식 프로세스가 만들어진다.
즉, 비슷한 일을 하는 프로세스가 여러 개 생기더라도 각 프로세스는 별도의 메모리 공간을 가진다.
이 방식은 프로세스들이 서로 독립적이기 때문에 안정성이 높다.
예를 들어 한 프로세스에 문제가 생겨도 다른 프로세스에 직접적인 영향을 덜 줄 수 있다.
하지만 단점도 있다.
프로세스를 여러 개 만들면 메모리를 더 많이 사용할 수 있다. 또한 프로세스 간에 데이터를 주고받으려면 별도의 통신 방법이 필요하다.
이런 프로세스 간 통신을 IPC(Inter-Process Communication)라고 한다.
대표적으로 다음과 같은 방식이 있다.
파일을 이용한 통신
공유 메모리를 이용한 통신
파이프
소켓
메시지 큐
멀티 스레드
멀티 스레드는 하나의 프로세스 안에서 여러 스레드를 실행하는 방식이다.
스레드들은 각자 실행 흐름을 유지하기 위한 최소 정보만 따로 가진다.
대신 같은 프로세스의 자원은 공유한다.
따라서 멀티 스레드는 멀티 프로세스보다 메모리를 더 효율적으로 사용할 수 있다.
예를 들어 여러 스레드가 같은 코드와 데이터를 공유하므로, 프로세스를 여러 개 복제하는 것보다 자원 낭비가 적다.
또한 같은 프로세스 안에 있기 때문에 스레드 간 데이터 공유가 비교적 쉽다.
하지만 이 점은 단점이 되기도 한다.
여러 스레드가 같은 자원에 동시에 접근하면 데이터가 꼬일 수 있다.

예를 들어 여러 스레드가 같은 전역 변수를 동시에 수정하면 예상하지 못한 결과가 나올 수 있다.
그래서 멀티 스레드에서는 동기화가 중요하다.
멀티 프로세스와 멀티 스레드 비교
두 방식을 비교하면 다음과 같다.
멀티 프로세스
- 여러 프로세스를 실행
- 프로세스끼리 기본적으로 자원 공유 X
- 안정성이 높음
- 메모리 사용량이 클 수 있음
- 프로세스 간 통신 IPC 필요
멀티 스레드
- 하나의 프로세스 안에서 여러 스레드 실행
- 같은 프로세스의 자원 공유 O
- 메모리 사용이 비교적 효율적
- 데이터 공유가 쉬움
- 동기화 문제가 발생할 수 있음
간단히 말하면, 멀티 프로세스는 서로 독립적인 여러 실행 공간을 만드는 방식이고, 멀티 스레드는 하나의 실행 공간 안에서 여러 실행 흐름을 만드는 방식이다.
스레드와 현대 운영체제
전통적인 운영체제 교재에서는 CPU가 프로세스를 실행한다고 설명하는 경우가 많다.
하지만 현대 운영체제에서는 CPU가 실제로 실행하는 단위를 스레드로 보는 경우가 많다.
즉, 프로세스는 자원을 담는 단위이고, 스레드는 실제 실행되는 단위라고 이해하면 좋다.
프로세스 = 자원 할당의 단위
스레드 = 실행의 단위
리눅스에서는 프로세스와 스레드를 엄격하게 구분하기보다 task라는 개념으로 함께 다루기도 한다.
그래서 문헌이나 운영체제에 따라 표현이 조금씩 다를 수 있다.
하지만 공부할 때는 다음처럼 정리하면 충분하다.
프로세스는 실행 중인 프로그램이다.
스레드는 프로세스 안의 실행 흐름이다.
같은 프로세스의 스레드들은 자원을 공유한다.'STUDY' 카테고리의 다른 글
| [운영체제] 교착 상태 발생 조건과 자원 할당 그래프 (0) | 2026.05.27 |
|---|---|
| [운영체제] 동기화 도구: 뮤텍스 락, 세마포, 모니터 정리 (0) | 2026.05.27 |
| [운영체제] 프로세스 상태와 프로세스 계층 구조 정리 (0) | 2026.05.27 |
| [운영체제] 프로세스 개요: PCB, 문맥 교환, 메모리 영역 정리 (0) | 2026.05.27 |
| [운영체제] 프로세스 동기화: 실행 순서 제어와 상호 배제 (0) | 2026.05.27 |