| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- 이클립스
- 고맙다트럼프
- pepe the frog
- 가장빨리부자되는법
- 노베이스 정처기 공부법
- DevOps
- 도커
- ai의 시대
- 슬픈 개구리
- Crypto.Cipher
- docker
- 노베이스 정처기
- 십새
- linux
- 유튜브
- PEPE
- 나스닥 개폭락
- 유튜브 기초강의
- concurrent.futures에러
- 인간관계론
- PER
- 정처기
- 페페
- 정보처리기사
- PBR
- 티스토리챌린지
- 노베이스 정보처리기사 합격법
- 유튜브 성공하는법
- 오블완
- thks gpt
Archives
- Today
- Total
실패는 성공을 위한 밑거름
멀티스레드 vs 멀티프로세스: 차이점과 특징 총정리 본문
간단하게
멀티스레드 vs 멀티프로세스
- 멀티스레드: 한 프로세스 내 여러 실행 흐름, 변수공유 , 메모리 공유, 동기화 필요
하나의 프로세스 내에서 여러 실행 흐름(스레드)을 생성하는 것
- 멀티프로세스: 여러 독립 프로세스, 메모리 분리, 별도 통신 필요
프로세스는 독자적인 메모리 공간과 자원을 가지고 완전히 분리되어 동작
멀티스레드 vs 멀티프로세스: 차이점과 특징 총정리
현대 소프트웨어 개발에서 성능과 효율을 높이기 위해 병렬 처리를 많이 사용합니다.
대표적인 병렬 처리 방법으로는 멀티스레드(Multithreading) 와 멀티프로세스(Multiprocessing) 가 있는데요,
두 방식은 동시 작업을 수행한다는 점은 같지만 동작 원리와 장단점에서 큰 차이가 있습니다.
이번 글에서는 멀티스레드와 멀티프로세스의 차이점을 쉽게 비교하고, 각각 어떤 상황에 적합한지 정리해 보겠습니다.
1. 멀티스레드(Multithreading)란?
- 하나의 프로세스 내에서 여러 실행 흐름(스레드)을 생성하는 것
- 스레드끼리는 메모리와 자원을 공유하며, 같은 프로세스 내에서 동작
- 각각의 스레드는 독립적으로 작업을 수행하지만, 메모리 공간은 동일
- 예: 웹서버에서 한 프로세스 내 여러 스레드가 여러 사용자의 요청을 동시에 처리
장점
- 메모리 공유로 데이터 전달과 상태 공유가 쉽다
- 스레드 생성과 문맥 교환(context switch) 비용이 프로세스보다 적다
- 작업 간 통신 비용이 적고 빠르다
단점
- 하나의 스레드 오류가 프로세스 전체에 영향을 줄 수 있다
- 메모리 공유로 인해 동기화 문제(race condition, 데드락 등) 발생 위험
- 파이썬 같은 언어에서는 GIL(Global Interpreter Lock) 때문에 CPU 병렬 처리 성능이 제한될 수 있다
2. 멀티프로세스(Multiprocessing)란?
- 독립적인 여러 프로세스를 생성해 병렬로 작업을 수행하는 것
- 각 프로세스는 독자적인 메모리 공간과 자원을 가지고 완전히 분리되어 동작
- 프로세스 간 통신(IPC: Inter-Process Communication)은 별도의 방법(파이프, 큐, 공유 메모리 등)을 사용해야 한다
- 예: 데이터 분석에서 여러 프로세스를 띄워 CPU 코어별로 작업 분산 처리
장점
- 프로세스가 독립적이라 한 프로세스 오류가 전체에 영향 주지 않는다
- GIL 영향을 받지 않아서 CPU 병렬 처리에 유리하다 (파이썬 기준)
- 안정성 면에서 스레드보다 뛰어남
단점
- 프로세스 생성 및 문맥 교환 비용이 크다
- 메모리 공유가 안 되기 때문에 데이터 전달이 복잡하고 비용이 발생
- 프로세스 간 통신 구현이 비교적 까다롭다
3. 멀티스레드 vs 멀티프로세스 비교표
구분멀티스레드멀티프로세스
| 메모리 공유 | 동일 프로세스 내 메모리 공유 | 각 프로세스가 독립 메모리 공간 |
| 생성/종료 비용 | 낮음 | 높음 |
| 문맥 교환 비용 | 낮음 | 높음 |
| 데이터 공유 | 쉽고 빠름 | IPC 사용 필요, 복잡 |
| 안정성 | 낮음 (하나 오류 시 전체 영향 가능) | 높음 (독립 실행) |
| 병렬 처리 성능 | GIL 등의 제약으로 제한적 (특히 파이썬) | CPU 코어 완전 활용 가능 |
| 사용 예 | I/O 중심 작업, 빠른 상태 공유 필요 시 | CPU 집중 작업, 독립 작업 분할 시 |
4. 언제 멀티스레드를 선택할까?
- 작업이 I/O 바운드(입출력 대기 많음) 상황인 경우 (예: 웹서버, 파일 입출력, 네트워크)
- 메모리 공유가 필수적이고, 상태 공유가 빈번한 경우
- 생성과 관리 비용을 줄이고 싶은 경우
5. 언제 멀티프로세스를 선택할까?
- CPU 연산이 많이 필요한 CPU 바운드 작업 (예: 이미지 처리, 데이터 분석)
- 안정성이 중요해 오류가 다른 작업에 영향 안 주어야 할 때
- 병렬 처리 시 파이썬 GIL 문제를 우회해야 할 때