Process[Thread]
쓰레드
스레드는 메모리 안에서 실행되는 프로세스를 구성하는 실행의 흐름 단위입니다.
스레드라는 개념이 도입 되기 전에는 하나의 프로세스는 한 번에 하나의 일만 처리하였습니다.
즉, 하나의 프로세스에 하나의 스레드만 존재 했었습니다.
하지만 스레드라는 개념이 도입되고 나서는 하나의 프로세스가 한 번에 여러가지 일을 처리하는 것이 가능하게 되었습니다.
이때 하나의 프로세스가 한 번에 하나 일만 처리한다는 이는 단일 스레드 프로세스이고, 하나의 프로세스가 한 번에 여러가지 일을 처리한다는 이는 멀티스레드 프로세스 입니다.
단일 스레드 프로세스
단일 스레드 프로세스는 한 개의 프로세스에 단 한 개의 스레드만 가지고 있습니다.
멀티 스레드 프로세스
멀티 프로세스는 한 번에 여러가지 일을 처리한다고 했는데, 이는 프로세스를 구성하는 여러 명령어들을 동시에 실행 할 수 있게 된 것과 마찬가지입니다.
여기서 멀티 스레드 프로세스는 한 개의 프로세스에 여러 개의 스레드를 가지고 있다고 했는데 이를 좀 더 자세히 알아보겠습니다.
사진의 메모리 단을 보면 각 스레드는 스택 영역에서 실행이 되고 있고 있고, 힙 영역, 데이터 영역, 코드 영역을 모두 공유하고 있습니다.
이 말은 즉, 스레드의 구성 요소에는 스레드 ID, 레지스터 값, 스택으로 구성되어 있는데, 이 값만 가지고 실행이 되고, 나머지 영역(힙, 데이터, 코드)들은 모두 공유하면서 실행 된다는 것 입니다.
그럼 여기서 하나의 프로세스에 여러 개의 스레드가 존재한다는 이 말에 대해서 좀 더 알아 보겠습니다.
멀티 프로세스와 멀티 스레드
컴퓨터를 부팅하면 메모리에 많은 프로세서들이 생성되고, 이 프로세스 들은 여러 개의 스레드를 보유하고 있을 수 있습니다.
이때, 여러 개의 프로세스를 동시에 실행 하는 것을 멀티 프로세스라고 하고 여러 개의 스레드로 프로세스를 동시에 실행하는 것을 멀티 스레드라고 합니다.
결론
단일 스레드 프로세스와, 멀티 스레드 프로세스에 대해서 알아보았습니다.
단일 스레드는 하나의 프로세스는 하나의 스레드를 가지고 있고, 멀티 스레드는 하나의 프로세스는 여러 개의 스레드를 가지고 있습니다.
그리고 멀티 스레드 프로세스의 스레드는 최소한의 정보 ( 스레드 ID, 각 레지스터 값, 스택 ) 을 제외한 모든 영역 ( 데이터, 힙, 코드 ) 을 공유한다고 하였습니다.
예를 들어 보겠습니다. 같은 일을 하는 프로세스를, 단일 스레드 프로세스를 3개와 멀티 스레드 프로세스에서 스레드를 3개 실행하는 것과 비교 하면 아주 큰 차이가 있습니다.
일단 프로세스를 fork( 프로세스를 복제하는 운영체제 명령어 입니다. )하여 단일 스레드 프로세스를 3개 실행 하면 기본적으로 자원 낭비가 생깁니다.
단일 스레드 프로세스는 프로세르를 3개 실행하는 것이기 때문에 기본 적으로 자원을 공유하지 않습니다.
즉, 이 말은 코드 영역, 스택 영역, 힙 영역 등을 비롯한 모든 자원이 복제되어 메모리에 적재됩니다. 한 마디로 서로 다른 정보인 스택 영역을 제외하면 모든것이 동일한 프로세스 2개가 통째로 메모리에 적재된다는 것 입니다.
하지만 멀티 스레드 프로세서를 이용하면 프로세스 안에 스레드를 3개를 만드는 것이기 때문에 자원 낭비가 생기지 않습니다.
이는 기본적으로 스레드는 최소한의 정보(스레드 ID, 각 레지스터 값, 스택)를 제외한 나머지 모든 자원들을 공유할 수 있다는 점에서 자원 낭비가 생기지 않습니다.
하지만 멀티 스레드 프로세스에는 단점이 하나 존재합니다. 자원을 공유한다는 특성 때문에 하나의 스레드에 문제가 발생하면 프로세스 전체에 문제가 생길 가능성이 있습니다.
이는 여러 자원을 공유한다는 점 때문입니다.