반응형
멀티 프로세스와 멀티 스레드는 시스템의 컴퓨팅 성능을 높이기 위하여 사용되는 처리방식
헷갈리는 키워드
실행 단위
- CPU core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념.
- 즉, 실행단위는 프로세스, 스레드 둘 다 가리킬 수 있음.
프로세스
- 하나의 스레드만 가지고 있는 단일 스레드 프로세스
동시성
- 동시성은 한순간에 여러가지 일을 하는 것 X
- 굉장히 빠른 속도로 실행하는 일을 전환하여 한 번에 여러가지 일을 하는 것처럼 보이는 것.
프로세스와 스레드
프로세스
프로그램은 단순히 실행대기 중인 명령어(코드)와 정적인 데이터의 묶음이며 보조 기억장치에 존재.
프로세스는 코드로 작성된 프로그램이 메모리에 적재되어 사용할 수 있는 상태가 된 것.
즉, 프로세스는 실행 중인 프로그램
- 보조 기억장치(ex. HDD)에 있는 프로그램을 실행하면, 프로그램 실행을 위하여 메모리 할당이 이루어지고, 이 할당된 공간으로 바이너리 코드가 올라가게 됨. 이 때부터 프로세스라고 불림.
스레드
스레드란 프로세스 내에서 실제로 작업을 수행하는 것.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행함.
두 개 이상의 스레드를 가지는 프로세스를 멀티 스레드 프로세스 라고 함.
멀티 프로세스와 멀티 스레드
멀티 프로세스 (Multi Process)
멀티 프로세스란 두 개 이상의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)를 동시에 처리하는 것. - 병렬 처리
각 프로세스간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야할 경우 사용.
멀티 프로세스의 장점
- 독립된 구조로 안전성이 높음.
- 여러 개의 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업 속도가 느려지는 손해 정도는 생기지만 작업이 정지되거나 하는 등의 큰 손해는 발생하지 않음.
- 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴함.
멀티 프로세스의 단점
- 독립된 메모리 영역이기 때문에 작업량이 많을 수록 (Context Switching이 자주 일어나 주소 공간의 공유가 잦을 경우) 오버헤드가 발생하여 성능 저하의 가능성이 존재.
- 오버헤드란? 간단히 말하면 특정 기능을 수행하는데 드는 간접적인 시간, 메모리와 같은 자원을 뜻함.
20초의 실행시간을 가진 프로그램이 1분이 걸리게 된다면 이 프로그램의 오버헤드는 40초.
- 오버헤드란? 간단히 말하면 특정 기능을 수행하는데 드는 간접적인 시간, 메모리와 같은 자원을 뜻함.
- Context Switching과정에서 캐시 메모리 초기화등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생함.
Context Swithcing
CPU는 하나의 프로세스만 실행할 수 있는데, 여러 프로세스를 동시에 수행하는 것처럼 보이기 위하여 여러 개의 프로세스들을 교체해가면서 작업을 진행함.
프로세스를 교체하는 과정에서 이전의 프로세스의 상태(문맥 = Context)를 보관하고, 새로운 프로세스의 상태를 적재하는 작업을 함.
이것이 Context Switching
멀티 스레드 (Multi Thread)
멀티 스레드란 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것을 의미.
멀티 스레드의 장점
- 시스템 자원 소모 감소 - 자원의 효율성이 증가
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있음.
- 시스템 처리율 향상 - 처리 비용 감소
- 스레드 간 데이터를 주고받는 것이 간단해짐. - 시스템 자원 소모 감소
- 스레드 사이의 작업량이 적어 Context Switching이 빠르게 이루어짐.(캐시 메모리를 비울 필요 X)
- 간단한 통신 방법으로 프로그램 응답시간 단축
- 스레드는 프로세스 내의 스택 영역을 제외한 메모리 영역을 공유하므로 통신 비용이 적음.
- 힙 영역을 공유하므로 데이터를 주고받을 수 있음.
멀티 스레드의 단점
- 자원을 공유하기에 동기화 문제가 발생할 수 있음 - 병목 현상, 교착상태(데드락) 등
- 병목(bottleneck)현상이란? 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상
- 교착 상태(deadlock)란? 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태
- 주의 깊은 설계가 필요하고 디버깅이 어려움.
- 불필요한 부분까지 동기화하면, 대기시간으로 성능 저하 발생
- 버그가 발생하면 찾기가 힘듦.
- 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받으.
- 단일 프로세스 시스템일 경우 큰 효과를 기대하기 어려움.
멀티 프로세스 VS 멀티 스레드
- 멀티 프로세스는 독립된 구조로 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지않아 안전성이 높지만,
멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지함. - 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching의 비용이 적지만,
동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 가능성이 있음. - 멀티 프로세스, 멀티 스레드 모두 동시에 여러 작업을 수행하다는 점에서는 동일하지만, 각각의 특징과 장단점이 있어 시스템에 따라 적합한 동작 방식을 선택해야함.
참고
반응형
'컴퓨터 과학(ComputerScience)' 카테고리의 다른 글
가비지 컬렉션(Garbage Collection) (0) | 2022.07.24 |
---|---|
JVM(자바 가상 머신)의 내부 구성 및 동작 원리 (0) | 2022.07.24 |
캐시 메모리(Cache Memory) 그리고 캐시의 지역성(Cache Locality) (0) | 2022.07.23 |
메모리의 동적할당(C언어) (0) | 2022.07.23 |
스택 프레임(Stack Frame)이란? + 스택 오버플로우(Stack Overflow) (0) | 2022.07.22 |
최근댓글