멀티프로세스(Multi-Process)란?
하나의 프로그램이 여러 개의 프로세스를 생성하여 병렬로 실행하는 구조
- 각 프로세스는 독립된 메모리 공간을 가짐
- 프로세스 간 통신은 IPC(Inter-Process Communication)을 통해 수행됨 (예: 파이프, 소켓 등)
- 하나가 죽어도 다른 프로세스에 영향이 적음
예시
- 웹 브라우저(크롬): 탭마다 별도 프로세스로 실행 → 한 탭이 다운되어도 다른 탭은 영향 없음
- 서버: 클라이언트 요청마다 별도 프로세스로 처리
멀티스레드(Multi-Thread)란?
하나의 프로세스 안에서 여러 개의 스레드가 동시 실행되는 구조
- 스레드는 코드, 데이터, 힙을 공유하고 스택만 독립적
- 같은 프로세스 내에서 빠르게 통신하고 협업 가능
- 하지만 하나의 스레드 오류가 전체 프로세스에 영향을 줄 수 있음
예시
- 게임 클라이언트: 렌더링, 사운드, 네트워크를 각각 다른 스레드에서 처리
- 웹 서버: 요청 처리, 로깅, DB 저장 등을 스레드로 병렬화
구조 비교
| 항목 | 멀티프로세스 | 멀티스레드 |
|---|
| 실행 단위 | 독립된 프로세스 | 프로세스 내 스레드 |
| 메모리 | 완전히 분리됨 | 코드/데이터/힙 공유, 스택만 분리 |
| 통신 속도 | 느림 (IPC 필요) | 빠름 (메모리 직접 접근) |
| 안정성 | 하나 죽어도 영향 적음 | 하나 오류 시 전체 영향 가능성 있음 |
| 생성 비용 | 큼 (무거움) | 작음 (가벼움) |
| 활용 예시 | 브라우저, 데몬 프로세스 | 게임, 웹 서버, 실시간 처리 |
장단점 요약
멀티프로세스
- 장점
- 안정성 높음 (독립적 구조)
- 문제 발생 시 확산 방지
- 단점
- 메모리 사용량 많음
- 프로세스 간 통신이 복잡하고 느림
멀티스레드
- 장점
- 메모리 효율적 (공유 구조)
- 통신 및 협업 빠름
- 단점
- 스레드 간 동기화 필요 (race condition 발생 가능)
- 하나의 스레드가 전체를 멈출 수 있음
선택 기준은?
| 상황 | 적합한 구조 |
|---|
| 안정성과 격리가 중요한 경우 | 멀티프로세스 |
| 속도와 협업이 중요한 경우 | 멀티스레드 |
예시
- 브라우저는 탭마다 격리가 필요해 멀티프로세스
- 게임, 실시간 서버는 빠른 반응이 필요해 멀티스레드