프로세스 & 스레드
프로세스
- 프로그램이 실행되면 프로세스 인스턴스가 생성된다.
- 인스턴스가 생성된다는 의미는 프로그램 실행에 필요한 내용이 메모리(Ram)에 적재된다는 뜻
- 즉 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태
- 프로그램 : 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램

- 아래 그림과 같이 운영체제를 통해 여러 프로세스(프로그램)을 실행하고 관리할 수 있는데, 이를 멀티태스킹 이라고 한다.

프로세스의 구조

- 코드 영역 : 프로그래머가 작성한 프로그램이 코드 영역에 저장됨
- 데이터 영역 : 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있다.
- 스택 영역 : 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현할 때 사용된다.
- 힙 영역 : 동적으로 할당되는 데이터들을 위해 존재하는 공간이다.
원칙적으로 서로 다른 프로세스간의 메모리 공간 접근은 허용하지 않는다.
만약 프로세스간 서로 다른 자원에 접근하려면 프로세스간의 통신을 해야한다.
- Tip
- CPU는 사실 한번에 한가지 명령어밖에 처리하지 못한다.
- 즉 동시가 아닌 재빠르게 프로세스를 번갈아가며 실행하고, 관리하는 것이다.
- CPU는 아주 빠르기 때문에 프로세스들을 번갈아 가며 실행하고 관리하는 것이 마치 동시에 하는 것처럼 보일 뿐이다.
멀티 태스킹
- 멀티태스킹이란 OS를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 행위를 말한다.
- 이를 통해 여러 프로그램을 동시에 열고 작업할 수 있다는 장점이 있다.
스레드
- 스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
- 일반적으로 하나의 애플리케이션은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.
- 즉 프로세스를 생성하면 기본적으로 하나의 메인스레드가 생성되는 것이다.

- 스레드는 프로세스 내에서 각각 Stack만 할당받고, Code, Data, Heap 영역은 공유하게 된다.
- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
- 하지만 프로세스는 다른 프로세스의 메모리에 접근할 수 없다 !
- 한 스레드가 프로세스 자원을 변경하면 다른 이웃 스레드도 그 변경 결과를 즉시 확인할 수 있다.
결론
- 프로세스는 자원을 공유하지 않지만 스레드는 자원을 공유한다.
멀티 프로세스 & 멀티 스레드
멀티 프로세스
- 멀티 프로세스란 하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
멀티 프로세스의 특징
- 안정성이 좋다. 여러개의 자식 프로세스 중 하나에 문제가 발생해도 다른 자식 프로세스에 영향이 확산되지 않는다.
- 구현이 비교적 간단하고, 각 프로세스들이 독립적으로 동작하며 자원의 서로 다르게 할당된다.
- 프로세스 간 통신을 하기 위해서는 IPC 를 통해야한다.
- 메모리 사용량이 많다.
- 스케쥴링에 따른 Context Switch가 만아지고 성능 저하의 우려가 있다.
멀티 스레드
- 멀티 스레드란 하나의 애플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다.
- 일반적으로 멀티스레드를 사용하는 이유는 사용자와 상호작용하는 애플리케이션에서 단일 스레드로 Network 또는 DB와 같은 긴 작업을 수행하는 경우 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기때문이다.
멀티 스레드의 특징
- 응답성이 좋다. 프로그램의 일부분이 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속 수행된다.
- 자원 공유가 쉽다. 스레드들은 부모 프로세스의 자원과 메모리를 공유할 수 있다.
- 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 작다.
- 멀티프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다.
- 구현 및 테스트, 디버깅이 어렵다
- 너무 많은 스레드 사용은 오버헤드를 발생시킨다.
- 동기화 그리고 교착상태가 발생하지 않도록 주의해야 한다.
- 자식 스레드 중 하나에 문제가 생긴 경우 프로세스 전체에 영향을 줄 수 있다.