프로세스 & 스레드
정의
Process = 독립적인 실행 단위(실행 중에 있는 프로그램)
Thread = 프로세스 내부에서 실행되는 작은 실행 단위
Process
구조
→ code, data, stack, heap 독립적으로 할당
특징
- 독립성 : 각 프로세스는 고유한 메모리 공간과 리소스를 가지며, 다른 프로세스의 메모리나 리소스에 직접 접근할 수 없음
- 오류 격리 : 하나의 프로세스에서 오류나 충돌이 발생해도 다른 프로세스에 영향을 주지 않음
- 통신 : 파이프, 소켓, 메시지 큐와 같은 IPC를 사용하여 서로 통신함
- 생성 부하 : 리소스가 많이 들고 시간이 오래 걸림
Thread
구조
→ stack만 할당받아 복사하고 code, data, heap은 프로세스내의 다른 스레드들과 공유
특징
- 독립성: 동일한 프로세스 내 스레드는 동일한 메모리 공간을 공유하므로 서로의 데이터에 직접 접근하고 수정할 수 있음
- 오류 격리: 스레드 내에서 오류가 발생하면 동일한 프로세스 내 다른 스레드에도 영향을 미칠 수 있음
- 통신: 동일한 프로세스 내 스레드는 메모리를 공유하기에 쉽게 통신할 수 있음
- 생성 부하: 동일한 프로세스 내의 스레드는 프로세스의 리소스를 공유하므로 생성 부하가 적음
다중 프로세스 VS 다중 스레드
다중 프로세스 (Multi-process)
하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 것
다중 스레드 (Multi-threaded)
하나의 프로세스 안에 여러 개의 스레드를 실행할 수 있게 하는 것
다중 프로세스 | 다중 스레드 | |
---|---|---|
안정성 | 다른 프로세스에 영향 X | 충돌 가능성 O |
확장성 | 확장성 제공 | 확장성 제한 |
문맥 교환 부하 | 별도의 메모리 공간 → 오버헤드 ↑ | 메모리 공유 → 오버헤드 ↓ |
자원 공유 비효율성 | IPC 필요 → 효율성 ↓ | 메모리 공유 → 효율성 ↑ |
references
👉 https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4
👉 https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-multi-process-multi-thread