CS

멀티 프로세스와 멀티 쓰레드의 차이점이 무엇일까?

Crysis 2022. 8. 21. 16:42

이번 공모전을 진행하면서 Pandas를 이용하여 파생 변수를 만들다가 판다스에서 제공하는 기본적인 코드로 작성하고 돌려보니 약 300시간이라는 엄청난 시간이 걸려 Pandas DataFrame.apply() 함수는 단일 코어 작업으로 작동하는 사실을 파악하고 Multiprocessing을 이용하여 10시간으로 작업 시간을 줄이면서 멀티 프로세스와 멀티 쓰레드는 무엇이 차이가 있는지 알아야 한다고 생각하여 알아보았다.

 

프로세스와 쓰레드

프로세스는 운영체제로부터 자원을 할당 받는 작업의 단위

스레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

프로세스는 운영체제로부터 자원을 할당 받는 작업의 단위
스레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

 

프로세스를 정확하게 이해하기 위해서는 프로그램을 이해를 하고 넘어가는 것이 좋다

 

프로그램

파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지않은 정적인 상태

 

 

process

 

이 정의의 뜻은 예를 들어 우리가 잘 알고있는 게임인 LOL을 설치했다고 가정하자.

롤을 설치하고 실행하지 않은 상태 - 정적인 상태

롤을 실행하고 있는 상태 - 동적인 상태 (메모리에 올라가 있는 상태)

롤을 설치하고 실행하지 않은 상태 - 정적인 상태
롤을 실행하고 있는 상태 - 동적인 상태 (메모리에 올라가 있는 상태)

 

롤이라는 프로그램을 실행하는 순간 파일은 메모리에 올라가게 되고 동적인 상태로 변한다 이 상태를 프로세스라고 한다.

프로세스의 정의는 실행되고 있는 컴퓨터 프로그램이며, 프로세스라는 단어가 작업 중인 프로그램을 의미하는 단어이다.

 

프로세스의 특징

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

 

프로세스의 단점

운영체제는 안정성을 위해서 프로세스마다 자신에게 할당된 메모리 내의 정보만 접근 할 수 있도록 제약을 두고 있으며, 

할당된 메모리 외의 정보를 접근하려고 하면 오류가 발생하게 되어 프로세스보다 더 작은 개념인 스레드라는 개념이 나오게 되었다.


스레드

Thread

프로세스와는 다르게 스레드간 메모리를 공유하며 작동한다 스레드는 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 된다.

 

스레드의 특징

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

 

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

동시에 두 가지 이상의 루틴을 실행 할 수 있는 역할을 하는 것은 같다.

멀티 프로세스

두 개 이상 다수의 프로세서(cpu)가 협력적으로 하나 이상의 작업을 동시에 병렬 처리 하는 것

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

 

 

멀티 프로세스 장점

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

 

멀티 프로세스 단점

  • 독립된 메모리 영역이기 때문에 작업량이 많을수록(Context Switching가 자주 일어나서 주소 공간의 공유가 잦을 경우)오버헤드가 발생하여 성능 저하를 일으킬 수 있음.
  • Context Switching과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생

 

Context Switching

  • cpu는 한 번에 하나의 프로세스만 실행 가능하다.
  • cpu에서 여러 프로세스를 돌아가면서 작업을 처리하는데 이 과정을 Context Switching이라 부른다.
  • 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태(Context)를 보관하고 대기하고 있던 다음 순서의 프로세스가 동장하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

 

멀티 스레드

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

 

 

멀티 스레드 장점

시스템 자원 소모 감소 --> 자원의 효율성 증대

  • 프로세스를 생성하여 메모리 공간 등의 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리
  • 자원 공유가 쉬움. 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있다.

프로세스간 통신 방법 IPC에 비해 간단한 통신 방법 (프로그램 응답시간 단축)

  • 동적으로 할당인 공간이 heap 영역 또는 Data의 공간을 이용한 데이터 공유로 자원 생성과 관리의 중복을 최소화

시스템 처리율 향상

  • 캐시 메모리를 비울 필요가 없고 Stack 영역만 처리하면 되서 스레드 간 Context Switching이 빠르다

프로그램 응답 시간 단축

 

 

 

멀티 스레드 단점

  • 자원을 공유하기 때문에 동기화 문제 발생(병목현상, 데드락 등)
  • 주의 깊은 설계가 필요하고 디버깅이 어렵다
  • 하나의 스레드의 문제가 생기면 전체 프로세스의 영향을 받음
  • 단일 프로세스 시스템의 경우 효과를 기대하기 어려움

 

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

  • 멀티 스레드는 멀티 프로세스보다 작은 메모리 공간 차지, Context Switching이 빠른 장점이 있지만 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험이 존재
  • 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지않아 안정성이 높지만 멀티 스레드보다 많은 메모리 공간과 cpu 시간을 차지하는 단점이 존재
  • 동시에 여러 작업을 하는 점에서 두 방법은 동일하다 하지만 각자 장단점이 있으므로 적용하는 시스템에 따라 적합한 동작방식을 선택하고 적용해야 한다.

 

 

 

 

Reference

 

https://wooody92.github.io/os/%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C/

 

https://suzyalrahala.tistory.com/53

 

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

 

https://livenow14.tistory.com/67