Python

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

xangmin 2022. 5. 18. 17:41
반응형

1. 프로세스

1) 프로세스란? 

메모리에 적재되어 CPU 자원을 할당 받아 실행되는 프로그램.

 

2) 할당받는 시스템 자원

  • CPU 시간
  • 주소 공간
  • Code, Data, Stack, Heap 구조로 된 독립된 메모리 영역

3) 프로세스 특징

  • 프로세스는 각각 독립된 메모리영역(code, data, heap, stack)을 할당받으며, 다른 프로세스의 변수나 자료구조에 접근 불가하다.
  • 다른 프로세스의 자원에 접근하려면 파이프, 파일, 소켓 등을 이용해 통신해야한다.
  • 프로세스는 최소 1개의 메인 스레드를 갖고 있다.

 

2. 스레드

1) 스레드란? 

프로세스의 작업단위.

 

 

2) 스레드 특징

  • 프로세스 내에서 stack만 따로 할당받고, code, data, heap 영역은 공유한다.
  • 한 스레드가 프로세스 자원을 변경하면, 이웃 스레드도 그 변경결과를 즉시 볼 수 있다.
  • 프로세스 내에서 스레드 간 자원을 공유하거나 하지 않는 경우 둘 다 있다.

3. 멀티 프로세스와 멀티 스레드 비교

1) 멀티 프로세스

하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 태스크를 처리하도록 하는 것이다.

 

멀티 프로세스의 장점

  • 여러 자식 프로세스 중 하나가 죽어도 다른 프로세스에는 영향이 미치지 않아, 정상적으로 수행된다.

멀티 프로세스의 단점

  • 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다.
  • Context Switching의 오버헤드 발생
  • 프로세스간 복잡하고 어려운 통신기법

 

2) 멀티 스레드

하나의 응용프로그램을 여러 개의 스레드로 구성하고, 각 스레드로 하여금 하나의 작업을 처리하도록 함.

 

멀티 프로세스의 장점

  • 멀티 프로세스보다 적은 메모리 공간을 차지하고 context switch가 빠르다.
  • 스레드 간 통신에 별도의 자원을 이용하지 않고도, 전역변수 공간이나 heap 영역을 통해 데이터를 주고 받을 수 있다.
  • 스택을 제외한 모든 영역이 메모리를 공유하므로 통신 부담이 적다.

멀티 프로세스의 장점

  • 스레드간 자원을 공유하기 때문에, 하나의 스레드만 오류로 종료되어도 전체 스레드가 종료될 수 있다.
  • 동기화문제: critical section
    - critical section이란? 동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역이다.
    - 스레드 간에는 전역 변수를 공유하므로 함께 사용할 때 충돌이 발생할 수 있다.

 

멀티 프로세스 대신 멀티 스레드를 이용하는 이유는?

  • 자원의 효율성 증대
  • 멀티스레드로 작업할 경우, 프로세스를 생성하여 자원을 할당하는 시스템콜이 줄어든다.
  • 프로세스간 context switch 시, CPU 레지스터뿐만 아니라 RAM과 CPU 사이의 캐쉬까지 초기화되어 오버헤드가 크기때문.
  • 스레드는 프로세스 내 메모리(stack 제외)를 공유하기 때문에 통신 비용이 적다.
  • 스레드 간 context switch 시, stack만 전환하면 되므로, 전환 속도가 빠르다.
반응형