2020. 9. 3. 11:14ㆍStudy
멀티스레드(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) 을 공유하지 않습니다.
오버헤드란 무엇일까 ? (기존에 정리한 글)
Process와 Thread의 차이 (기존에 정리한 글)
'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 |