Multi Process
멀티 프로세스 ( 멀티 태스킹 )
- 하나의 운영체제 안에서 여러 프로세스가 실행되는 것을 의미한다.
- 2개 이상 다수의 프로세서 CPU가 협력적으로 1개 이상의 작업을 동시에 처리하는 병렬 기법이다.
- 각 프로세스 간 메모리 구분이 필요하거나, 독립된 주소 공간을 가질 경우 사용
멀티 프로세스 장점
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 외의 이상으로 다른 영향이 확산되지 않는다.
멀티 프로세스의 단점
- Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등 오버헤드가 발생하게 된다.
- 또한, 프로세스는 각각 독립된 메모리 영역을 할당받았기에 프로세스 사이에서 공유하는 메모리가 없어 Context Switching 발생하면 캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬 정보를 불러와야 한다.
- 프로세스들 사이의 변수를 공유할 수 없어 프로세스 사이의 어렵고 복잡합 통신 기법
Multi Thread
멀티 스레드
- 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것
멀티 스레드의 장점
- Context-Switching할때, 공유하고 있는 메모리만큼의 메모리 자원을 아낄수있다.
- 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리 공유로 통신의 부담이 적기때문에 응답 시간이 빠르다.
멀티 스레드의 단점
-
스레드 하나가 프로세스 내 자원을 망치면 모든 프로세스가 종료될 수 있다
-
자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수 있다.
(여러 스레드가 함께 전역 변수를 사용할 경우 발생할 수 있는 충돌)
→ 스케줄링은 운영체제가 자동으로 해주지 않기에 적절한 기법을 직접 구현해야합니다. 따라서 프로그래밍할때 멀티 스레드를 사용하려면 디버깅 과정도 까다로워지기때문에 신중해야합니다.
멀티 프로세스 대신 멀티 스레드를 사용하는 이유
프로그램을 여러 개 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이다.
여러 스레드로 나눠가면서 하는 이유는
- 자원의 효율성 증대를 위해서
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어
- 처리 비용 감소 및 응답 시간 단축
- 프로세스 간의 통신(IPC)보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어든다.