"프로세스와 스레드"
프로그래밍을 입문하고 언어를 공부하다보면 한 번쯤은 듣게된다.
프로세스와 스레드는 매우 유사하므로 둘의 차이점을 이해하는 데 어려움을 느낀다.
프로세스와 스레드는 독립적인 실행 순서이지만
프로세스가 서로 다른 메모리 공간에서 실행되는 반면 동일한 프로세스의 스레드는 공유 메모리 공간에서 실행된다는 차이가 있다.
프로그램과 프로세스
프로그램은 특정 작업을 수행하기 위해 작성된 일련의 지침이다.
일반적으로 디스크나 다른 저장 매체에 저장되는 정적 엔터티이며, 프로그램은 실행될 때 프로세스가 된다.
프로그램을 실행하면 운영체제는 해당 프로그램을 디스크에서 시스템 메모리로 로드하고 실행한다.
프로그램의 실행중인 인스턴스를 프레세스라고 하며, 각 프로세스에는 자체 메모리 공간과 시스템 리소스가 있다.
프로세스와 스레드
프로세스
자체 메모리 공간이 있는 독립 엔터티로, 애플리케이션에 대한 격리 및 보안을 제공한다.
운영체제로부터 시스템 자원을 할당받는 작업의 단위이다.
ex) CPU 시간, 운영되기 위해 필요한 주소 공간, Code, Data, Stack Heap 구조의 독립된 메모리 영역
즉, 프로그램의 실행중인 인스턴스이며, 격리을 보장하는 것이 주요 키워드이다.
특징
- 프로세스는 각각 독립된 영역을 할당 받는다.
- 기본적으로 프로세스당 최소 1개의 스레드를 가진다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC)을 사용해야 한다.
스레드
프로세스 내의 더 가벼운 공유 메모리 단위로 작업의 효율적인 병렬 실행을 가능하게 한다.
프로세스의 하위 집합이며 경량 프로세스라고도 불린다.
프로세스에는 둘 이상의 스레드가 있을 수 있지만 스레드는 스케줄러에 의해 독립적으로 관리된다.
특징
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로,
프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다. - 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
반면에 다른 프로세스의 메모리에 직접 접근할 수 없다. - 한 스레드가 프로세스 자원을 변경하면, 다른 스레드도 변경 결과를 즉시 볼 수 있다.
멀티스레드와 멀티 프로세스
Multi Threading과 Multi Processiong은 효율성과 성능을 높이기 위해 컴퓨팅 작업을 병렬화 하는 두 가지 접근 방식이다.
Multi Thread Application
멀티 스레딩에선 단일 프로세스에 여러 스레드가 포함될 수 있다.
프로세스 내의 모든 스레드는 동일한 메모리 공간을 공유하므로 스레드 간에 정보를 더 쉽고 빠르게 공유할 수 있다.
그러나 동일한 메모리를 공유하므로 경쟁 조건 및 교착상태와 같은 문제가 발생할 수 있다.
멀티 스레드는 적은 메모리와 적은 CPU 점유시간을 가지며, Context Switching 비용이 낮다.
Multi Process Application
멀티 프로세스에선 각각 자체 메모리 공간이 있는 여러 프로세스가 사용된다.
한 프로세스의 충돌이 다른 프로세스에 직접적인 영향을 미치지 않으므로 이러한 격리를 통해 안정성이 향상될 수 있다.
그러나 프로세스 간 통신은 스레드에 비해 더 복잡하고 느릴 수 있다.
멀티 프로세스는 많은 메모리와 CPU 점유시간을 가지며 Context Switching이 느리다
따라서 메모리를 나누어 안정성을 높일 땐 Multi Process를
Context Switching이 많고 빠른 처리 속도를 요구할 경우 Multi Thread를 이용하는 게 좋다.