테니드2
2025. 3. 6. 20:31
2025. 3. 6. 20:31
✅ 1. 프로세스(Process)란?
- 정의: 실행 중인 프로그램 (OS에서 독립적으로 관리하는 작업 단위)
- 특징:
- 각각 독립된 메모리 공간(코드, 데이터, 힙, 스택)을 가짐
- 프로세스 간 자원 공유 불가 (IPC 방식으로만 가능)
- 하나의 프로세스는 여러 개의 쓰레드를 가질 수 있음
- 예제:
- 크롬 브라우저의 각 탭 (각각의 탭이 개별 프로세스로 실행)
- 터미널에서 실행한 Python 스크립트
✅ 2. 쓰레드(Thread)란?
- 정의: 프로세스 내에서 실행되는 작은 단위 (Lightweight Process)
- 특징:
- 동일한 메모리 공간을 공유 (코드, 데이터, 힙은 공유하지만 스택은 개별적)
- 컨텍스트 스위칭 비용이 프로세스보다 낮음
- 하나의 프로세스에서 여러 쓰레드를 실행하면 병렬 처리 가능
- 예제:
- 크롬 브라우저 내에서 여러 개의 탭이 동시에 실행
- 게임에서 캐릭터 이동, 배경 음악, 충돌 감지 등이 별도 쓰레드로 동작
✅ 3. 프로세스 vs 쓰레드 비교표
| 비교 항목 |
프로세스 (Process) |
쓰레드 (Thread) |
| 메모리 공간 |
독립적 |
공유 (코드, 데이터, 힙) |
| 실행 단위 |
개별 실행 |
프로세스 내의 실행 단위 |
| 자원 공유 |
IPC 필요 (느림) |
공유 가능 (빠름) |
| 컨텍스트 스위칭 비용 |
높음 (OS가 프로세스 간 전환) |
낮음 (같은 프로세스 내 전환) |
| 병렬 실행 |
가능 (멀티 프로세싱) |
가능 (멀티 쓰레딩) |
| 예제 |
브라우저의 여러 창 |
브라우저의 여러 탭 |
✅ 4. 언제 프로세스를 쓰고, 언제 쓰레드를 쓸까?
| 상황 |
프로세스 사용 |
쓰레드 사용 |
| CPU 사용량이 높은 작업 |
✅ |
❌ |
| IO 작업(파일, 네트워크) |
❌ |
✅ |
| 독립적인 작업 실행 필요 |
✅ |
❌ |
| 데이터 공유 필요 |
❌ (IPC 필요) |
✅ (메모리 공유) |
✅ 5. 결론
- 프로세스는 완전히 독립된 실행 단위, 쓰레드는 같은 프로세스 내에서 실행되는 가벼운 실행 단위
- 병렬 처리가 필요한 경우:
- CPU 바운드 작업(연산 집중적) → 멀티프로세스
- IO 바운드 작업(네트워크, 파일 처리) → 멀티쓰레드
- 자원 공유가 필요하면 쓰레드, 독립성이 필요하면 프로세스 사용