MultiProcess vs MultiThread
MultiProcess
- 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
장점
- 독립된 구조이므로 하나의 자식 프로세스만 죽는 것으로 다른 영향을 주지 않는다(높은 안정성)
단점
- Context Switching 오버헤드
독립된 메모리 영역을 할당받으므로 Context Switching 발생 시 캐시에 있는 모든 데이터를 리셋하고 다시 불러오는 과정에서 무거운 작업 진행 및 시간 소모 발생
- 프로세스 사이의 어렵고 복잡한 통신 기법(IPC)
독립된 메모리 영역 할당으로 프로세스 사이의 변수 공유 불가
Context Switching : CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정, 프로세스의 상태를 보관/대기하고 있던 프로세스 동작시 상태 복구 작업
MultiThread
- 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것
- 윈도우, 리눅스 등 많은 운영체제들이 멀티프로세싱을 지원하고 있지만 멀티스레딩을 기본으로 함
- 웹 서버는 대표적인 멀티스레드 응용 프로그램
장점
- 시스템 자원 소모 감소
프로세스를 생성하여 자원을 할당하는 시스템콜이 줄어들어 자원을 효율적으로 관리 가능(자원의 효율성 증대)
- 시스템 처리량 증가
스레드 간 데이터를 주고 받는 것 간단하며 시스템 자원 소모 감소(처리 비용 감소)
스레드 간의 작업량이 작아 Context Switching이 빠름
- 간단한 통신 방법 - 프로그램 응답시간 단축
Stack 메로리를 제외한 모든 메모리 공유로 통신 부담이 적음
단점
- 주의 깊은 설계 필요
- 까다로운 디버깅
- 다른 프로세스에서 스레드 제어 불가능(프로세스 밖에서 스레드를 각각 제어 불가)
- 멀티스레드의 경우 자원 공유 문제 발생(동기화 문제)
- 하나의 스레드에 문제 발생시 전체 프로세스 영향
- 단일 프로세스 시스템의 경우 효과 기대가 어려움
멀티프로세스 대신 멀티스레드 사용 이유?
프로그램을 여러개 키는 것보다 하나의 프로그램 안에서 여러 작업 해결
프로그램을 여러개 생성하는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이 더욱 효율적!
- 프로세스를 생성하여 자원을 할당하는 시스템콜이 줄어들어 자원을 효율적으로 관리 가능
- Context Switching시 캐시 메모리를 비울 필요가 없기 때문에 비용이 적고 더 빠름
- 스레드는 프로세스 내의 메모리를 공유하기 때문에 데이터 전달이 간단하므로 IPC에 비해 비용이 적고 더 빠름