1. 스레드
스레드는 프로세스의 실행 단위다.
스택, 스레드 ID, 프로그램 카운터, 레지스터 집합으로 구성된다.
같은 프로세스 안의 다른 스레드와는 코드 섹션, 데이터 섹션, 힙 섹션, 운영체제 자원 등을 공유한다.
대신 스레드마다는 다음과 같은 특징을 가진다:
- 별도의 스택을 가진다. 스택은 함수 호출 시 인자, 되돌아갈 주소값, 지역 변수 등을 저장하는 공간인데, 각 스레드가 독립적으로 함수를 호출하려면 스택 공간도 따로 둬야 하기 때문이다.
- 별도의 PC, 레지스터 집합을 가진다. 각각의 실행 위치와 명령어 수행 중 임시 값을 스레드별로 따로 관리해야기 떄문이다.
정리하자면, 힙·데이터·코드는 공유 영역, 스택·PC·레지스터는 스레드별 개별 영역이다.
다중 스레드를 가진 프로세스의 PCB를 보면, process state/PID/memory limits/open files 같은 항목은 프로세스 전체가 공유하지만, PC와 레지스터 집합은 스레드 1/2/3마다 각각 따로 기록된다.
멀티 스레딩 장단점
장점
- 응답성 향상: 한 스레드가 Blocked여도 다른 스레드는 계속 실행 가능
- 자원 공유: 같은 프로세스의 메모리를 공유하니까 통신 비용이 없어서 프로세스 간 통신보다 빠름
- 비용 절감: 생성/관리 비용, 문맥 전환 비용이 프로세스보다 낮음
- 병렬 처리: 멀티코어 CPU에서 여러 스레드를 동시에 실행해 성능 향상
단점
- 스레드 간에는 공유 자원이 있기 때문에, 같은 자원에 동시 접근하면서 문제(레이스 컨디션 등)가 생길 수 있음 → 이게 나중에 나올 Critical Section(임계 구역) 문제와 연결됨
- 응답성은 좋아지지만, 한 스레드에서 치명적 오류가 나면 전체 프로세스에 영향을 줌 → 멀티 프로세스보다 안정성은 낮음
2. 멀티 프로세스
하나의 프로그램을 여러 개의 프로세스로 나누어 동시에 실행하는 구조. 각 프로세스는 독립된 주소 공간과 자원을 가져서 서로 간섭하지 않는다. 대표 예시가 크롬 브라우저의 탭 구조 (탭 하나가 죽어도 다른 탭은 멀쩡한 이유).
장점
- 안정성 높음: 한 프로세스가 비정상 종료되어도 다른 프로세스엔 영향 없음
- 병렬 처리 가능: 멀티코어 CPU에서 여러 프로세스가 동시에 실행
- 보안성 향상: 주소 공간이 분리되어 있어 침범이 어려움
단점
- 메모리 낭비: 각 프로세스가 독립된 주소 공간을 가지므로 중복된 코드·데이터 존재
- 문맥 교환 비용 증가: 프로세스 간 전환 시 PCB 저장·복원 필요
- 통신 복잡성 증가: 프로세스 간 데이터를 주고받으려면 IPC(Inter-Process Communication) 필요
-
3. 멀티 프로세스 vs 멀티 스레드 비교
| 구분 |
멀티 프로세스 |
멀티 스레드 |
| 주소 공간 |
완전 분리 |
동일한 주소 공간 공유 |
| 통신 방법 |
IPC 필요 |
전역 변수, 힙 공유로 간단 |
| 안정성 |
한 프로세스 오류 시 다른 프로세스 영향 없음 |
한 스레드 오류 시 전체 프로세스 종료 가능 |
| 성능 |
문맥 교환 오버헤드 큼 |
전환 빠름 |
| 사용 예시 |
브라우저, 서버 |
애플리케이션 내부 동시 작업 처리 |
결국 "안정성이냐 vs 효율성(비용)이냐"의 트레이드오프다.
독립성이 필요하면 멀티 프로세스, 가볍고 빠른 협업이 필요하면 멀티 스레드를 쓰게 되는 구조를 택하면 된다.
정리
스레드는 프로세스 안에서 코드·데이터·힙은 공유하고 스택·PC·레지스터만 따로 갖는 실행 단위다. 멀티 스레드는 가볍고 빠르지만 자원을 공유해서 안정성이 떨어지고, 멀티 프로세스는 무겁지만 서로 완전히 독립적이라 안정적이다.
프로세스 끝.. !😂