Post

프로세스와 스레드

하루 하나씩 정리해보는 지식노트

프로세스와 스레드

프로세스

프로세스는 실행중인 프로그램으로 볼 수 있고 하나 이상의 스레드로 구성이 된다.

스레드

스레드는 프로세스 안에서의 하나의 실행 흐름이다.

프로세스와 스레드 메모리 영역 구성

  • text segment - 프로그램을 구성하는 코드/명령들이 load 되는 영역.
  • data segment - 글로벌 또는 스태틱 변수들이 load 되는 영역.
  • stack segment - 프로그램 실행과 관련된 데이터 영역; 스택 콜 프레임, 지역 변수 등이 존재한다.
  • heap segment - 프로그램에서 동적으로 할당되는 변수의 데이터 영역.

하나의 프로세스는 각자 개별적으로 위의 메모리 영역이 구성이 된다. 즉 프로세스 A 와 프로세스 B 는 메모리 영역을 공유하지 않는다.

반면 하나의 스레드는 각자 실행의 관련된 영역만 개별적으로 가진다. 즉 stack segment 만 독립적으로 가지고 나머지 메모리 영역은 스레드를 포함하고 있는 프로세스가 공유해준다고 보는게 맞을 것 같다. 즉 스레드 A 와 스레드 B 가 프로세스 A 에 속해 있다면 둘은 같은 메모리 영역을 갖는다 그리고 같은 메모리 영역을 갖는다는 것은 같은 데이터에 (예를 들어 변수에) 접근이 가능하다는 뜻이다.

조금 헷갈릴 수 도 있겠지만, 위에서 언급했듯이 프로세스는 적어도 하나의 스레드를 갖는다. 즉 프로세스가 갖는 메모리 영역은 프로세스가 관리하는 메모리 영역과 프로세스 안에 있는 스레드가 관리하는 메모리 영역이라고 보는게 맞는것같다.

그리고 같은 프로세스안에서의 스레드들은 stack segment 을 제외한 메모리 영역을 공유하게 된다.

프로세스 특징

높은 격리성

각 프로세스들끼리는 높은 격리성을 보장 받을 수 있다. 하나의 다른 의미로는 만약 한 프로세스가 제대로 동작하지 않을 때 다른 프로세스들은 따로 영향을 받지 않는다.

독립성

높은 격리성 특징과 거의 비슷한 이야기지만 더 일반화된 특징으로는 프로세스들끼리는 독립성이 생긴다.

높은 자원 사용량

하나의 프로세스는 모든 메모리 영역이 따로 관리되고 실행이되기 때문에 스레드의 비해 더 많은 자원을 사용하게 된다.

스레드 특징

프로세스의 거의 반대되는 특징이다.

더 낮은 격리성

격리성이 아예 없는건 아니여서 “더 낮은” 이라는 표현을 사용했다.

실행적으로는 모든 스레드들은 격리되어있고 독립적이다. 하지만 같은 프로세스 안에서 스레드들끼리는 나머지 메모리 영역을 공유하기 때문에 같은 데이터에 접근 할 수 있다. 이 특징은 몇가지 장단점으로 해석 할 수 있다.

  1. [장점] 스레드끼리 데이터 작업이 (읽기/쓰기) 가능하다.
  2. [단점] 원할한 데이터 작업을 위해 공유되는 데이터의 관리가 필요해서 코드 작성시 복잡도가 올라간다.

더 낮은 자원 사용량

stack segment 만 독립적으로 가지기 때문에 더 빠르게 스레드를 생성하거나 스레드 사이를 컨텍스트 스위칭 할 수 있다.

컨텍스트 스위칭은 CPU 가 하나의 작업에서 다른 작업으로 전환하는 과정을 말하고 프로세스와 스레드 모두 컨텍스트 스위칭을 통해 하나의 프로세스/스레드에서 다른 프로세스/스레드로 전환한다.

이때 프로세스와 스레드의 컨텍스트 스위칭을 비교했을때 스레드의 컨텍스트 스위칭이 더 빠르게 이루얼 질 수 있다.

그 이유는 프로세스는 현재 진행중인 프로세스의 메모리 영역 상태를 저장하고 새로 로드할 프로세스의 메모리 영역을 불러와야 하는 반면 스레드는 stack segment 만 교체하면된다.

유즈 케이스

프로세스

프로세스는 CPU 처리량에 병목현상을 보이는 (CPU bound) 작업에 보통 더 적합하다.

주로 많은양의 데이터 처리와 진정한 병렬처리를 위해 사용한다.

스레드

스레드는 I/O 처리의 병목현상을 보이는 (I/O bound) 작업에 보통 더 적합하다.

네트워크 통신으로 인해 입력/출력 값을 기다리는 경우, 사용자의 입력/출력 값을 기다리는 경우등 처리량이 아니라 대기하는 동안 다른 작업을 할 수 있을 때 주로 사용하는 것 같다.

This post is licensed under CC BY 4.0 by the author.