Multi Thread와 Multi Process란 무엇일까?

2020. 9. 3. 11:14Study

멀티스레드(mulit Thread)

 - 멀티스레드란 2개 이상의 스레드가 동시에 실행되는 것을 말합니다.

 - 프로세스의 Code, Data, Heap 영역을 공유하지만 Stack영역은 공유하지 않습니다.

 

장점

 - 프로그램의 응답 시간이 줄어듭니다.

 - 시스템의 자원 소모가 감소합니다 (자원의 효율성 증대)

 - 시스템 처리량 증가 (처리 비용 감소)

 

단점

 - 멀티 스레드를 사용할 경우 동기화 처리를 하지 않으면 데이터 손실 및 오류 발생

 - 프로그램 디버깅이 어렵습니다.

 - 하나의 스레드에서 문제가 발생하면 전체 프로세스가 영향을 받습니다.

 - 단일 프로세스 시스템의 경우 효과를 기대하기 어렵습니다.

 

예시 (스타크래프트의 테란을 예로 들어보겠습니다..)

 커멘드센터가 하나의 프로세스라고 한다면 SCV 4마리 중 1마리는  메인스레드이고, 나머지 3마리는 멀티스레드입니다.

스레드는 생성될 때 커멘드센터(프로세스)에게 미네랄을 담을 수 있는 개인 미네랄 주머니(Stack)를 할당 받으며,

미네랄의 위치, 미네랄을 캐내는 방법, 커멘드센터(프로세스)의 명령 등 (Code, Data, Heap) 을 공유합니다. 

 

멀티프로세스(multi Process)

 - 멀티프로세스란 2개 이상의 프로세스가 동시에 실행되는 것을 말합니다.

 - 프로세스 간에 Code, Data, Heap, Stack 영역 모두 서로 공유하지 않습니다. 

 

장점

 - 프로세스 간에 Code, Data, Heap, Stack 영역 모두 공유하지 않기 때문에 안전합니다.

 

단점

 - 각각 독립된 메모리 영역을 가지고 있기때문에 작업량이 많으면 Context Switching 에서의 오버헤드가 발생할 수 있습니다.

 

예시 (스타크래프트의 테란을 예로 들어보겠습니다..)

 커멘드센터(프로세스)가 총 4개 있습니다 각각의 커멘드센터는 게임 이용자(OS)에게 토지(메모리)를 할당 받습니다.

건설 된 프로세스는 서로 다른 토지(메모리)를 할당 받았기 때문에 미네랄의 수, 생성된 SCV의 수 등

(Code, Data, Heap, Stack) 을 공유하지 않습니다.

 

오버헤드란 무엇일까 ? (기존에 정리한 글)

hun-developer.tistory.com/33

Process와 Thread의 차이 (기존에 정리한 글)

hun-developer.tistory.com/22

'Study' 카테고리의 다른 글

Critical Section이란 무엇일까?  (0) 2020.12.23
DeadLock이란 무엇일까?  (0) 2020.12.16
오버헤드란 무엇일까?  (0) 2020.08.31
Memory Leak이란 무엇일까?  (0) 2020.08.09
JVM(Java Virtual Machine)이란 무엇일까?  (0) 2020.08.03