⚡ 운영체제 - 멀티프로세스 vs 멀티스레드
⚡ 운영체제 - 멀티프로세스 vs 멀티스레드
🔹 멀티프로세스가 적합한 상황
▫️ 안정성과 격리성이 중요한 경우
- 하나의 프로세스가 오류나 예외로 종료되더라도, 다른 프로세스에는 영향을 주지 않음
- 크롬 브라우저(탭마다 프로세스 분리), 서버의 마이크로서비스 구조를 예시로 들 수 있다.
▫️ 보안이 중요한 경우
- 프로세스는 메모리를 공유하지 않기 때문에, 의도치 않은 데이터 접근을 방지할 수 있음
▫️ 서로 다른 언어나 환경에서 동작하는 모듈 간 통합
Python
프로세스와Java
프로세스가 별도로 실행되어 협업하는 구조를 예시로 들 수 있다.
▫️ 멀티코어 활용이 중요한 병렬 처리
Python
(GIL
문제)에서CPU
바운드 작업을 할 때는 멀티스레드 대신 멀티프로세스를 사용함
🔹 멀티스레드가 적합한 상황
▫️ 메모리 사용량을 줄이고, 빠른 문맥 전환이 필요한 경우
- 스레드는 메모리를 공유하므로 자원 소비가 적고, 컨텍스트 스위칭 비용도 낮음
▫️ 같은 데이터를 공유하며 동시에 처리해야 하는 경우
- 웹 서버에서 사용자 요청을 동시에 처리하거나, 백그라운드 작업을 병렬로 처리하는 상황을 예시로 들 수 있다.
▫️ IO
바운드 작업이 많은 경우
- 네트워크 요청 처리, 파일 읽기 및 쓰기를 예시로 들 수 있다.
GIL
이 있는 언어에서도 효율적으로 처리 가능
▫️ 단일 프로그램 내부에서 병렬성 확보가 필요한 경우
- 물리 연산, 렌더링, 사운드 등을 스레드로 분리하는 등 게임 엔진에서 활용, 채팅 서버 등
🔹 비교 요약
기준 | 멀티프로세스 | 멀티스레드 |
---|---|---|
메모리 사용 | 높음 | 낮음 |
안정성 | 높음 | 낮음 |
문맥 전환 비용 | 높음 | 낮음 |
데이터 공유 | IPC 필요 | 메모리 직접 공유 |
디버깅, 동기화 | 상대적으로 쉬움 | 동기화 문제 발생 가능 |
사용 사례 | 마이크로서비스, 브라우저 | 웹서버, 게임, GUI 앱 등 |
🔹 정리
- 안정성과 분리가 우선이라면 멀티프로세스를,
- 성능과 자원 효율이 우선이라면 멀티스레드를 사용하는 것이 적합하다.
This post is licensed under CC BY 4.0 by the author.