Appearance
프로세스 & 스레드
프로세스: 실행 중인 프로그램 인스턴스. 독립된 가상 주소 공간과 자원을 가진다.
스레드: 프로세스 안에서 실행되는 흐름의 단위. 현대 운영체제에서 실제 스케줄링 단위인 경우가 많다.
기본적으로 하나의 프로세스는 최소 1개의 스레드를 가진다.
프로세스

프로세스는 각각 독립된 주소 공간과 커널 자원을 가진다.
- Code(Text): 실행 코드
- Data/BSS: 전역 변수, 정적 변수
- Heap: 동적 할당 영역
- Stack: 함수 호출 프레임
- 그 밖의 자원: 열린 파일, 소켓, 시그널 설정, 권한 정보 등
스레드

스레드는 다음 요소를 각각 독립적으로 가진다.
- 프로그램 카운터(PC)
- 레지스터 집합
- 스택
- 스레드별 로컬 저장소(TLS)
반면 같은 프로세스의 스레드끼리는 보통 다음을 공유한다.
- 주소 공간(Code, Data, Heap, 메모리 매핑 영역)
- 열린 파일과 소켓
- 프로세스 수준 자원 대부분
멀티프로세스
여러 프로세스를 협력시키며 작업을 처리하는 방식
장점
- 주소 공간이 분리되어 격리가 강함
- 한 프로세스가 죽어도 다른 프로세스에 영향이 상대적으로 적음
- 보안 경계 설정이 비교적 쉬움
단점
- 프로세스 간 데이터 교환 시 IPC 비용이 듦
- 주소 공간 전환이 필요한 context switch는 일반적으로 더 무거움
멀티스레드
하나의 프로세스 안에 여러 스레드를 두고 작업을 나누는 방식
장점
- 같은 주소 공간을 공유하므로 데이터 교환이 빠름
- 프로세스보다 생성/종료/전환 비용이 가벼운 편
- 하나의 애플리케이션 안에서 병렬성을 얻기 좋음
단점
- 공유 메모리 때문에 race condition이 생기기 쉬움
- 한 스레드의 잘못된 메모리 접근이 프로세스 전체를 죽일 수 있음
- 동기화가 잘못되면 데드락이나 성능 저하가 발생함
멀티스레드의 핵심 위험은 공유 상태(shared state)다. 따라서 실제 구현에서는 임계 구역을 최소화하고, 뮤텍스·세마포어·조건 변수·원자 연산 같은 동기화 도구를 사용해 안전성을 확보한다.