프로세스 스레드

드립이 블로그·2023년 3월 31일
0

프로세스와 스레드

프로세스

운영체제로부터 시스템 자원을 할당받는 작업의 단위를 뜻한다.
동적 개념으로는 실행된 프로그램을 의미한다.
여기서 할당 받는 시스템의 자원으로는
CPU의 시간
운영을 위한 주소 공간
Code, Data, Stack, Heap 의 구조로 된 독립된 메모리 영역이다.

프로세스의 특징

프로세스는 각각이 독립된 메모리 영역을 할당받는다.
기본적으로 프로세스당 최소 1개의 스레드를 가지는데, 이를 메인스레드라고 한다.
각 프로세스는 별도의 주소 공간에서 실행된다.
각각 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
프로세스가 다른 프로세스에 접근하기 위해서는 프로세스간의 통신을 사용해야 한다.

스레드

스레드는 위의 설명한 프로세스의 안에서 실행되는 흐름의 단위이다.
프로세스가 할당받는 자원을 이용하는 실행의 단위이다.

스레드의 특징

프로세스 내에서 각각 스택만 따로 할당받고, 코드, 데이터, 힙 영역은 공유한다.
스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름이기 때문에, 프로세스 내의 주소공간이나 자원 등을 같은 프로세스 내의 스레드 끼리 공유하며 실행된다.
같은 프로세스 내의 스레드들은 힙 공간을 공유하지만, 다른 프로세스 의 메모리에는 직접 접근 할 수 없다.
각각 스레드는 별도의 레지스터와 자원을 가지고 힙메모리는 서로 읽고 쓰는것이 가능하다.
한 스레드가 프로세스 자원을 변경시, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다.

자바 스레드

자바에서는 자바 스레드 라는 것이 존재한다.
이는 일반 스레드와 거의 차이가 없는데, JVM이 운영체제의 역할을 한다는 차이점이 있다.
프로세스가 존재하지 않고, 스레드만 존재한다.
개발자는 자바 스레드로 작동하는 스레드 코드를 작성하고, 스레드 코드 실행을 시작하도록 JVM에 요청한다.


멀티 프로세스와 멀티 스레드

멀티 프로세스

하나의 응용 프로그램을 여러 프로세스로 구성해 각 프로세스가 하나의 작업을 처리하는 것을 뜻한다.

장점

여러 프로세스 중 하나의 프로세스에 문제가 생길시, 그 프로세스만 죽는 것 이상으로 다른 영향으로 확산 되지 않는다.

단점

Context Switching 에서 오버헤드가 발생하게 된다.

Context Switching : 프로세스 실행시, 기존 프로세스를 중단하고 다른 프로세스를 실행하는 것을 뜻한다.

프로세스는 각각의 독립된 메모리 영역을 할당받기 때문에 프로세스 사이에서 공유 메모리가 없어 Context Switching이 발생하면, 캐시의 모든 데이터를 리셋해야한다.
또한, 하나의 프로그램에 속하는 프로세스 간의 변수 공유가 불가능하다.

멀티 스레드

하나의 응용 프로그램을 여러 스레드로 구성해 각 스레드로 하나의 작업을 처리하는 것을 뜻한다.
많은 운영체제들이 멀티 프로세스를 지원하지만, 멀티 스레드를 기본방식으로 설정해 놓는다. ex) 윈도우 리눅스 등등....
웹 서버는 대표적인 멀티 스레드 응용 프로그램이다.

장점

시스템 자원 소모가 감소한다.
자원 할당의 시스템 콜이 줄기 때문에, 자원을 효율적으로 관리가 가능하다.

시스템 처리량이 증가한다.
스레드 간의 데이터를 주고받는 것이 간단해지고, 시스템 자원의 소모가 줄어든다.

스레드 사이의 작업량이 작기 때문에 Context Switching이 빠르다.

간단한 통신 방법으로 프로그램의 응답 시간이 단축된다.
프로세스 내의 스택 영역을 제외한 모든 메모리를 공유하기 때문에, 통신의 부담이 적다.

단점

설계가 어렵다.
디버깅이 까다롭다.
단일 프로세스의 경우, 효과를 보기 어렵다.
다른 프로세스에서 스레드를 제어 할 수 없다. 즉, 스레드 밖에서는 제어가 불가능하다.
하나의 스레드에서 문제가 발생하면, 전체의 프로세스가 영향을 받는다.

0개의 댓글