멀티 프로세스
정의
- 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업(태스크)를 처리하도록 하는 것.
장점
- 여러 자식 프로세스 중 하나에 문제가 발생해도, 다른 프로세스로 영향이 확산되지 않음.
단점
- Context Switcing 오버헤드
- Context Switching 과정에서 캐시메모리 초기화 등 무거운 작업 진행, 시간 소모
- 프로세스는 각각 독립된 메모리 영역을 할당 받았으므로 공유하는 메모리가 없음. Context Switching 발생 시, 모든 캐시 데이터 리셋하고 다시 캐시 정보 불러와야 함.
- 프로세스 사이 어려운 통신 기법(IPC)
- 프로세스끼리 변수를 공유하지 않으므로 통신이 어려움
Context Switching
- CPU 내에서 여러 프로세스를 돌아가며 작업을 처리하는 과정
- 동작 중인 프로세스가 대기하며 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 프로세스가 동작하며 이전에 보관했던 프로세스 상태를 복구하는 작업
멀티 스레드
정의
- 하나의 응용프로그램을 여러 개의 스레드로 구성하고, 각 스레드는 하나의 작업을 처리하도록 하는 것.
- ex. 웹 서버
장점
- 시스템 자원 소모 감소( 자원 효율성 증대 )
- 프로세스 생성하여 자원 할당하는 시스템 콜이 줄어 효율적인 자원관리 가능
- 시스템 처리량 증가 ( 처리 비용 감소 )
- 스레드 간 데이터를 주고 받는 것이 간단해지고, 시스템 자원 소모가 줄어듦
- 스레드 사이 작업량이 작아 Context Switching 빠름
- 간단한 통신 방법. 프로그램 응답 시간 단축
- 스레드는 stack 영역 제외 모든 메모리 공유하므로 통신 부담 적음
단점
- 주의 깊은 설계 필요
- 디버깅 까다로움
- 단일 프로세스 시스템에선 효과 떨어짐
- 프로세스 밖에서 스레드 제어 불가
- 멀티 스레드는 자원 공유 문제 발생 (동기화 문제)
- 하나의 스레드에 문제 발생 시, 전체 프로세스 영향
멀티 프로세스 대신 멀티 스레드 사용 이유
- 프로그램을 여러 개 켜는 것보다 하나의 프로그램 안에서 여러 작업 해결하는 것.
- 자원 효율성 증대
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄음.
- 멀티 프로세싱에서 프로세스 간 Context Switching 시 단순히 CPU 레지스터 교체 뿐만이 아닌 RAM, CPU 사이 캐시메모리에 대한 데이터까지 초기화 되므로 오버헤드 큼
- 스레드는 프로세스 내 메모리 공유하므로 데이터 통신 간단, 시스템 자원 소모 감소
- 처리 비용 감소 및 응답 시간 단축
- 프로세스 간 통신 (IPC) 보다 스레드 간 통신 비용 적음. 작업 간 통신 부담 감소
- 스레드는 stack 제외 모든 데이터 공유하므로
- 프로세스 간 전환 속도보다 스레드 간 전환 속도가 빠름
- Context Switching 시 스레드는 stack 영역만 처리하게 때문
주의할 점
- 동기화 문제
- 스레드 간 자원 공유는 전역 변수(데이터 세그먼트)를 이용하므로 상용 시 충돌 발생 가능
- 스레드 하나가 프로세스 내 자원에 영향 끼치면 모든 프로세스가 종료될 수 있음.
기타
- IPC = Inter-Process Communication
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4