반응형
멀티 프로세스와 멀티 스레드는 시스템의 컴퓨팅 성능을 높이기 위하여 사용되는 처리방식

헷갈리는 키워드


실행 단위

  • CPU core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념.
  • 즉, 실행단위는 프로세스, 스레드 둘 다 가리킬 수 있음.

프로세스

  • 하나의 스레드만 가지고 있는 단일 스레드 프로세스

동시성

  • 동시성은 한순간에 여러가지 일을 하는 것 X
  • 굉장히 빠른 속도로 실행하는 일을 전환하여 한 번에 여러가지 일을 하는 것처럼 보이는 것.

프로세스와 스레드


프로세스

프로그램은 단순히 실행대기 중인 명령어(코드)와 정적인 데이터의 묶음이며 보조 기억장치에 존재.

프로세스는 코드로 작성된 프로그램이 메모리에 적재되어 사용할 수 있는 상태가 된 것.

즉, 프로세스는 실행 중인 프로그램

  • 보조 기억장치(ex. HDD)에 있는 프로그램을 실행하면, 프로그램 실행을 위하여 메모리 할당이 이루어지고, 이 할당된 공간으로 바이너리 코드가 올라가게 됨. 이 때부터 프로세스라고 불림.

 

스레드

스레드프로세스 내에서 실제로 작업을 수행하는 것.

모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행함.

두 개 이상의 스레드를 가지는 프로세스멀티 스레드 프로세스 라고 함.


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


멀티 프로세스 (Multi Process)

멀티 프로세스란 두 개 이상의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)를 동시에 처리하는 것. - 병렬 처리

각 프로세스간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야할 경우 사용.

멀티 프로세스의 장점

  • 독립된 구조로 안전성이 높음.
  • 여러 개의 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업 속도가 느려지는 손해 정도는 생기지만 작업이 정지되거나 하는 등의 큰 손해는 발생하지 않음.
  • 여러 개의  프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴함.

멀티 프로세스의 단점

  • 독립된 메모리 영역이기 때문에 작업량이 많을 수록 (Context Switching이 자주 일어나 주소 공간의 공유가 잦을 경우) 오버헤드가 발생하여 성능 저하의 가능성이 존재.
    • 오버헤드란? 간단히 말하면 특정 기능을 수행하는데 드는 간접적인 시간, 메모리와 같은 자원을 뜻함.
      20초의 실행시간을 가진 프로그램이 1분이 걸리게 된다면 이 프로그램의 오버헤드는 40초.
  • Context Switching과정에서 캐시 메모리 초기화등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생함.

Context Swithcing

CPU는 하나의 프로세스만 실행할 수 있는데, 여러 프로세스를 동시에 수행하는 것처럼 보이기 위하여 여러 개의 프로세스들을 교체해가면서 작업을 진행함.
프로세스를 교체하는 과정에서 이전의 프로세스의 상태(문맥 = Context)를 보관하고, 새로운 프로세스의 상태를 적재하는 작업을 함.
이것이 Context Switching


멀티 스레드 (Multi Thread)

멀티 스레드란 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것을 의미.

멀티 스레드의 장점

  • 시스템 자원 소모 감소 - 자원의 효율성이 증가
  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있음.
  • 시스템 처리율 향상 - 처리 비용 감소
  • 스레드 간 데이터를 주고받는 것이 간단해짐. - 시스템 자원 소모 감소
  • 스레드 사이의 작업량이 적어 Context Switching이 빠르게 이루어짐.(캐시 메모리를 비울 필요 X)
  • 간단한 통신 방법으로 프로그램 응답시간 단축
  • 스레드는 프로세스 내의 스택 영역을 제외한 메모리 영역을 공유하므로 통신 비용이 적음.
    • 힙 영역을 공유하므로 데이터를 주고받을 수 있음.

멀티 스레드의 단점

  • 자원을 공유하기에 동기화 문제가 발생할 수 있음 - 병목 현상, 교착상태(데드락) 등
    • 병목(bottleneck)현상이란? 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상
    • 교착 상태(deadlock)란? 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태
  • 주의 깊은 설계가 필요하고 디버깅이 어려움.
    • 불필요한 부분까지 동기화하면, 대기시간으로 성능 저하 발생
    • 버그가 발생하면 찾기가 힘듦.
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받으.
  • 단일 프로세스 시스템일 경우 큰 효과를 기대하기 어려움.

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

  • 멀티 프로세스는 독립된 구조로 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지않아 안전성이 높지만, 
    멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지함.
  • 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching의 비용이 적지만, 
    동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 가능성이 있음.
  • 멀티 프로세스, 멀티 스레드 모두 동시에 여러 작업을 수행하다는 점에서는 동일하지만, 각각의 특징과 장단점이 있어 시스템에 따라 적합한 동작 방식을 선택해야함.

참고

https://livenow14.tistory.com/67

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기