Program
- 실행 가능한 코드와 데이터의 집합으로, 보통 하드 디스크에 저장되어 있습니다.
- 프로그램은 컴퓨터에서 실행되기 위해서는 메모리에 적재되어야 하며, 실행 중인 프로그램이 아니더라도 저장 장치에 저장된 파일 자체를 의미한다.
- 어떤 작업을 위해 실행할 수 있는 파일. 즉, 정적인 개념
- ex) 웹 브라우저 실행 파일(.exe 등)
Process
- 실행 중인 프로그램으로, 프로그램이 메모리에 적재되어 CPU에 의해 실행되고 있는 상태를 말합니다.
- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가진다
- 프로세스는 독립된 메모리 영역 (code, data, stack, heap)을 할당 받는다.
- 프로그램이 메모리에 올라와 cpu를 할당받고 프로그램이 실행되고 있는 상태. 동적인 개념
- ex) 웹 브라우저 실행 파일을 메모리에 적재한 상태
Thread
- 프로세스 내에서 실행되는 여러 흐름의 단위로, 각각의 쓰레드는 자신만의 실행 흐름을 갖습니다.
- 스레드는 프로세스 내에서 stack만 따로 할당 받고, code, data, heap 영역은 공유한다
- 프로세스 내의 주소 공간이나 자원들(Heap 공간)을 같은 프로세스 내에 스레드끼리 공유하면서 실행
- ex) 웹 페이지 로딩, 렌더링 등의 작업을 처리하는데 사용되는 작은 실행 단위입니다.
-> 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
Multi Process
- 멀티프로세스는 여러 개의 독립된 프로세스를 동시에 실행하는 것을 말합니다.
- 각각의 프로세스는 자신만의 메모리 공간을 갖고, 서로 독립적으로 실행됩니다.
- 각각의 프로세스는 IPC(Inter-Process Communication)를 이용하여 데이터를 주고받을 수 있습니다.
- 멀티프로세스는 안정성이 높아서 하나의 프로세스가 비정상적으로 종료되어도 다른 프로세스는 영향을 받지 않습니다. ex) 동시에 여러 개의 웹 페이지를 띄워서 처리하는 경우, 각각의 웹 페이지를 처리하는 별도의 프로세스를 생성하여 처리합니다.
장점
- 독립된 구조이기 때문에 안정성이 높다.
- 여러 프로세스가 같이 작업하고 있기 때문에 하나의 프로세스가 죽는다 해도 문제가 확산되지 않는다. (대신 느려질 수는 있다. 다른 프로세스의 일을 자기가 더 해야하기 때문)
- 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴해짐
단점
- 멀티 스레드보다 많은 메모리 공간과 CPU시간을 차지한다.
- 독립된 메모리 영역이기 때문에 작업량이 많을 수록 (Context Switching이 자주 일어나서 주소 공간의 공유가 잦을 경우) 오버헤드가 발생하여 성능 저하가 발생할 수 있다.
Multi Thread
- 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 것을 말합니다.
- 각각의 스레드는 프로세스 내에서 동일한 메모리 공간을 공유합니다.
- 즉, 스레드 간의 데이터 전달이 빠르고 효율적입니다.
- 하지만, 하나의 스레드가 문제가 발생하면 전체 프로세스가 영향을 받을 수 있습니다.
- ex) 하나의 웹 페이지를 처리하는 경우, 여러 개의 스레드를 생성하여 작업을 병렬 처리합니다.
장점
- 시스템 자원 소모가 감소하여 자원의 효율성이 증대
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다
- 시스템 처리율 향상 (처리 비용 감소)
- 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 자원 소모가 줄어든다
- 스레드는 프로세스 내 스택 영역을 제외한 메모리 영역을 공유하기에 통신 비용이 적다
- 힙 영역을 공유하므로 데이터를 주고받을 수 있음
단점
- 자원을 공유하기에 동기화 문제가 발생할 수 있음 (병목현상, 데드락 등)
- 하나의 스레드에 문제가 발생하면 전체 프로세스에 영향을 끼친다
- 주의깊은 설계가 필요하고 디버깅이 어렵다 (불필요 부분까지 동기화하면, 대기시간으로 인해 성능 저하 발생)
-> 즉, 웹 브라우저 프로그램은 하나의 프로그램이지만, 동시에 여러 개의 웹 페이지를 처리하는 경우 멀티프로세스로 처리하거나, 하나의 웹 페이지를 처리하는 경우 멀티스레드로 처리할 수 있습니다.
멀티 프로세스 vs 멀티 스레드
- 멀티 스레드는 멀티 프로세스보다 작은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험을 갖고 있음
- 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리 공간과 CPU시간을 차지하는 단점이 있음
- 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 함
서브목차