프로그램 - 어떤 작업을 위해 실행할 수 있는 파일, 정적인 개념
프로세스 - 프로그램이 메모리에 올라와 cpu를 할당받고 프로그램이 실행되고 있는 상태, 동적인 개념
프로세스
- 컴퓨터에서 연속적으로 실행되고 있는 프로그램
- 메모리에 올라와 실행되고 있는 독립적인 인스턴스
- 운영체제로부터 시스템 자원을 할당받는 작업 단위
- 기본적으로 프로세스당 최소 1개의 스레드를 가진다.
- 프로세스는 독립된 메모리 영역(code, data, stack, heap을 할당 받는다.)
- 프로세스는 별도의 주소 공간에서 실행되므로, 다른 프로세스의 주소 공간에 접근할 수 없다.
- 프로세스 간의 데이터 통신을 위해 IPC을 통해 데이터를 주고받을 수 있다.
IPC : 프로세스 간 통신(Inter-Process Communication, IPC), 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로
스레드
- 프로세스 내에서 실행되는 흐름의 단위
- 일반적으로 한 프로그램은 하나의 스레드를 가지고, 둘이상의 스레드를 동시에 실행하면 멀티스레드가 된다.
- 스레드는 프로세스 내에서 stack만 따로 할당 받고, code, data, heap 영역은 공유한다.
- 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내의 스레드끼리 공유한다.
- 개별 스레드는 별도의 스택을 가지고, Heap 메모리는 서로 읽고 쓸 수 있다.
멀티 프로세스
- 여러 개의 프로세스가 서로 협력적으로 일을 처리
- 여러 개의 프로세스가 작업을 병렬 처리
- 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 떄 사용한다.
장점
- 독립된 구조이기에 안정성이 높다.
- 여러 프로세스가 같이 작업하고 있기에 하나의 프로세스가 죽으면 단지 느려지기만 한다.
- 여러 개의 프로세스가 처리될때 동일한 데이터를 사용하고, 이런 데이터를 하나의 디스크에 두고 모든 프로세서가 공유하면 비용이 저렴해진다.
단점
- 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다.
- 독립된 메모리 영역이기에 작업량이 많을수록 Context switching이 자주 일어나 오버헤드로 인한 성능 저하가 발생한다.
- Context switching은 멀티태스킹 운영 체제에서 여러 프로세스 간의 전환을 위해 현재 실행중인 프로세스의 상태를 저장하고 다음 실행할 프로세스의 상태로 복원하는 작업을 말합니다.
- 오버헤드는 처리를 하기 위해 들어가는 간접적인 시간, 메모리 등 자원을 얘기합니다.
멀티 스레드
- 하나의 작업을 위해 프로세스에서 여러 스레드를 생성해 여러 CPU 코어를 사용하기 위한 작업
장점
- 시스템 자원 소모가 감소해 자원의 효율성이 증가하고, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.
- 스레드 사이 작업량이 적어 context switching이 빠르다.
- 간단한 통신 방법으로 프로그램 응답시간이 단축되고, 프로세스 내 스택 영역을 제외한 메모리 영역을 공유하기에 통신 비용이 적다.
- 힙 영역을 공유하기에 데이터를 주고받는다.
단점
- 자원을 공유하기에 동기화 문제가 발생한다.
- 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 끼친다.
- 주의깊은 설계가 필요하며 디버깅이 어렵다.
- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
멀티 프로세스 vs 멀티 스레드
- 멀티스레드는 멀티 프로스보다 작은 메모리 공간을 차지하고, context switching이 빠르지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 수 있다.
- 멀티 프로세스는 하나의 프로세스가 죽더라도 느려지기만 하여 안정성이 높지만, 메모리 공간과 CPU 시간을 많이 차지하는 단점이 있다.
'공부를 함시다 > 개발 한 스푼' 카테고리의 다른 글
링크드 리스트(LinkedList)와 배열(ArrayList)의 장단점과 시간복잡도 (0) | 2023.06.24 |
---|---|
회선교환과 패킷교환 (0) | 2023.06.19 |