1. 프로세스란?
프로그램이란 어떤 작업을 위해 실행할 수 있는 파일을 말한다.
이러한 프로그램이 메모리에 적재되고 CPU 에 의해 실행중인 상태를 프로세스라고 한다.
기본적으로 프로세스는 최소 1개의 스레드를 가진다.
프로세스는 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받는다.
각 프로세스는 별도의 주소 공간에서 실행되므로, 다른 프로세스의 주소 공간(변수, 자료구조)에 접근할 수 없다.
프로세스간의 데이터 통신을 위해서는 IPC(Inter Process Communication)이 필요하다.
2. 스레드란?
프로세스 내에서 실행되는 흐름의 단위이다.
일반적으로 한 프로그램은 하나의 스레드를 가지고, 둘 이상의 스레드를 동시에 실행한다면 이를 멀티스레드라 한다.
스레드는 프로세스 내에서 Stack만 따로 할당 받고, Code, Data, Heap 영역은 공유한다.
3. Memory Map
프로세스는 운영체제로부터 CPU 시간, 주소공간, 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받는다.
3 - 1) Code 영역
실행할 프로그램의 코드가 저장되는 영역이다.
CPU는 이 영역에 저장된 명령어를 하나씩 수행한다.
프로그램이 끝날때까지 메모리 영역에 유지된다.
3 - 2) Data 영역
전역변수와 정적변수가 저장되는 영역이다.
프로그램 시작때 할당되고 종료될때 해제된다.
3 - 3) Stack 영역
프로그램에 의해 사용되는 임시 데이터 영역이다.
함수 호출시 지역변수, 매개변수를 저장한다.
3 - 4) Heap 영역
프로그래머에 의해 동적으로 할당되는 영역이다.
메모리를 동적으로 할당할 때 사용되는 영역이다.
4. Multi Process
여러 개의 프로세스를 통해 하나의 작업을 병렬적으로 처리하는 방식이다.
즉 같은 프로그램을 동시에 처리하기위한 방식이다.
각 프로세스 간 메모리 영역의 구분이 필요하거나 독립된 주소 공간을 가져야 할 때 사용한다.
4 - 1) 장점
각 메모리 영역이 독립적이기 때문에 안정성이 높다.
여러 프로세스가 실행중이기 때문에 하나의 프로세스에 문제가 생겨도 문제가 확산되지 않는다.
4 - 2) 단점
멀티 스레드 방식보다 많은 메모리 공간과 CPU 시간을 차지한다.
Context Switching 오버헤드가 발생할 수 있다.
**CPU는 여러 프로세스를 아주 짧은 시간 간격으로 돌아가면서 작업을 처리하는데 이 과정을 Context-Switching이라 한다.
5. Multi Thread
하나의 프로세스 내에서 여러 개의 스레드를 생성해 여러 CPU 코어를 사용하기위한 방식이다.
5 - 1) 장점
멀티프로세스 방식보다 적은 메모리 공간을 차지한다.
Context Switching 이 빠르다.
시스템 자원 소모가 감소하여 자원의 효율성이 증가한다.
스레드간의 통신이 프로세스간의 통신보다 비용이 적기 때문에 자원 소모가 감소한다.
5 - 2) 단점
하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 끼친다.
자원을 공유하기때문에 동기화를 각별히 신경써야한다.
개별로 스레드가 유기적으로 실행되기때문에 디버깅이 어렵다.