프로세스(Process)란?
- 프로그램 : 어떤 작업을 위해 실행할 수 있는 파일. 정적인 개념
- 프로세스 : 프로그램이 메모리에 올라와 cpu를 할당받고 프로그램이 실행되고 있는 상태. 동적인 개념
프로세스
- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
- 메모리에 올라와 실행되고 있는 독립적인 인스턴스 (개체)
- 운영체제로부터 시스템 자원을 할당받는 작업 단위
- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가진다
- 프로세스는 독립된 메모리 영역 (code, data, stack, heap)을 할당 받는다.
- 프로세스는 별도의 주소 공간에서 실행되므로, 다른 프로세스의 주소 공간(변수, 자료구조 등)에 접근할 수 없다.
- 프로세스 간의 데이터 통신을 위해 IPC(inter-Process Communication)을 통해 데이터를 주고 받을 수 있다.
스레드(Thread)란?
- 프로세스 내에서 실행되는 흐름의 단위
- 일반적으로 한 프로그램은 하나의 스레드를 가지고, 둘 이상의 스레드를 동시에 실행한다면 이를 멀티스레드(Multi-Thread)라 한다
- 스레드는 프로세스 내에서 stack만 따로 할당 받고, code, data, heap 영역은 공유한다.
- 프로세스 내의 주소 공간이나 자원들(Heap 공간)을 같은 프로세스 내에 스레드끼리 공유하면서 실행
- 개별 스레드는 별도의 Register와 Stack을 갖고, Heap 메모리는 서로 읽고 쓸 수 있다.
멀티 프로세스 (Multi-Process)
멀티 프로세스란?
- 여러 개의 프로세스가 서로 협력적으로 일을 처리하는 것.
- 여러 개의 프로세스가 작업을 병렬처리 하는 것
- 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 때 사용.
장점
- 독립된 구조이기 때문에 안정성이 높다.
- 여러 프로세스가 같이 작업하고 있기 때문에 하나의 프로세스가 죽는다 해도 문제가 확산되지 않는다. (대신 느려질 수는 있다. 다른 프로세스의 일을 자기가 더 해야하기 때문)
- 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴해짐
단점
- 멀티 스레드보다 많은 메모리 공간과 CPU시간을 차지한다.
- 독립된 메모리 영역이기 때문에 작업량이 많을 수록 (Context Switching이 자주 일어나서 주소 공간의 공유가 잦을 경우) 오버헤드가 발생하여 성능 저하가 발생할 수 있다.
-> context switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드 발생
- Context Switching이란?
- CPU는 한 번에 하나의 프로세스만 실행 가능.
- CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는데 이 과정을 Context-Switching이라고 함.
- 즉, 동작중인 프로세스가 대기하면서 해당 프로세스 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업
멀티 스레드 (Multi-Thread)
멀티 스레드란?
- 하나의 작업을 위해 프로세스에서 여러 스레드를 생성해 여러 CPU코어를 사용하기 위한 작업
장점
- 시스템 자원 소모가 감소하여 자원의 효율성이 증대
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다
- 시스템 처리율 향상 (처리 비용 감소)
- 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 자원 소모가 줄어든다
- 스레드 사이 작업량이 적어 Context Switching이 빠름 (캐시 메모리를 비울 필요가 없음)
- 간단한 통신 방법으로 프로그램 응답시간 단축
- 스레드는 프로세스 내 스택 영역을 제외한 메모리 영역을 공유하기에 통신 비용이 적다
- 힙 영역을 공유하므로 데이터를 주고받을 수 있음
단점
- 자원을 공유하기에 동기화 문제가 발생할 수 있음 (병목현상, 데드락 등)
- 하나의 스레드에 문제가 발생하면 전체 프로세스에 영향을 끼친다
- 주의깊은 설계가 필요하고 디버깅이 어렵다 (불필요 부분까지 동기화하면, 대기시간으로 인해 성능 저하 발생)
- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다
멀티 프로세스 vs 멀티 스레드
- 멀티 스레드는 멀티 프로세스보다 작은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험을 갖고 있음
- 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리 공간과 CPU시간을 차지하는 단점이 있음
- 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 함
Reference
https://www.byfuls.com/programming/read?id=61
https://livenow14.tistory.com/m/67