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

이전 포스팅에선 프로세스와 스레드에 대해 알아보았습니다.

이번 포스팅에선 멀티 프로세스와 멀티 스레드에 대해 알아볼건데요. 

프로세스와 스레드가 무엇인지에 대해 이해가 안가신다면 아래 포스팅을 참고하시면 됩니다.

 

프로세스와 스레드(process, thread)에 대해 알아보자.

Process ( 프로세스 ) “프로그램 ( 어떤 작업을 위해 실행할 수 있는 파일 .exe )이 메모리에 올라와 운영체제로 부터 CPU를 할당받고 프로그램이 연속적으로 실행되고있는 상태.” ( 일을 처리하는

hstory0208.tistory.com

 


멀티 프로세스 ( Multi Process )

 

하나의 프로세스는 하나의 작업만 처리할 수 있기 때문에 여러 작업을 동시에 처리할 수 없습니다.

그렇기 때문에 부모 프로세스를 fork 해서 자식 프로세스를 만들어 여러 개의 프로세스를 구성

하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것입니다.

이 때, 자식 프로세스는 부모와 별개의 메모리 영역을 확보하게 됩니다.

 

멀티 프로세스의 장점
  • 여러개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않는다. 
     즉, 하나의 프로세스가 잘못 되어도 프로그램은 동작
    한다.
  • 구현이 간단하고, 각 프로세스들이 독립적으로 동작하며 자원의 서로 다르게 할당되어 안정적이다.

 

멀티 프로세스의 단점
  • 멀티 스레드 보다 많은 메모리 공간과 CPU 시간을 차지한다.
  • 작업량이 많을수록 오버헤드가 발생하고 Context Switching으로 인한 성능 저하가 우려된다.
  • 프로세스는 각각의 동립된 영역을 할당당았기 때문에, 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.
    그렇기 때문에, 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다.

 


멀티 스레드 ( Multi Thread )

하나의 어플리케이션을 여러개의 스레드로 구성하고 각 스레드가 작업을 처리하는 것.

멀티 프로세스 대신 멀티 스레드를 사용하는 것은 “프로그램을 여러 개 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것 이라고 할 수 있습니다.

  • 자원의 효율성 증대
  • 처리 비용 감소 및 응답 시간 단축
  • 동기화 문제를 주의해야한다.

 

멀티 스레드의 장점
  • 스레드끼리는 긴밀하게 연결되어 있다.
  • 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋다.
  • 자원 공유가 쉽다. 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있다.
  • 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적다.
  • 멀티 프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다.
  • 스레드 사이 작업량이 작아 Context Switching이 빠르다. (스레드는 Stack영역만 처리하면 되기 때문 )
  • 스레드 간의 자원(Code, Data, Heap)을 공유하고 있기 때문에 통신의 부담이 적어 응답 시간이 빠르다.

 

멀티 스레드의 단점
  • 스레드 간의 데이터 공유 시 동기화 문제와 교착상태가 발생하지 않도록 주의해야 한다. ( 공유 자원 관리 필요 )
  • 스레드가 개별로 유기적으로 움직이고 있기 때문에 구현 및 프로그램 테스트, 디버깅이 어렵다.
  • 하나의 스레드의 오류로 전체 프로세스에 영향을 줄 수 있다.
  • 너무 많은 스레드 사용은 오버헤드를 발생시킨다.

 


멀티 프로세스와 멀티 스레드의 차이점

 

종류 멀티 프로세스 멀티 스레드
장점 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않는다. 프로세스의 응답시간이 단축되고 시스템의 처리율이 향상된다.
또한 코드영역과 데이터 영역을 공유하기 떄문에 자원 소모가 적다.
단점 각각 독립된 메모리 영역을 갖고 있어 작업량이 많을 수록 오버헤드가 발생하고 
Context Switching 으로 인한 성능 저하를 유발한다.

프로세스 사이의 통신이 복잡하다. (IPC 통신을 사용)
프로그램 디버깅이 어렵고 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 끼치게 된다.

 

멀티 프로세스의 예 : 구글 크롬

멀티 프로세스를 이용하기 때문에 여러 탭을 띄어 작업을 하더라도 한 탭에 문제가 생겼다고 구글 크롬이 전체가 종료되지 않습니다. 

멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않아 여러 탭을 띄어 작업하더라도 모든 탭이 종료되지 않습니다.

 

멀티 스레드의 예 : 인터넷 익스플로어

인터넷 익스플로어로 여러 탭으로 검색을 하거나 작업을 하다가 갑자기 이런 문구가 뜬적 다들 예전에 있었을 겁니다.

이때 정말 난감해지는게 내가 힘들게 찾은 정보들이 브라우저가 종료되면서 다 날라가버립니다.

그 이유가 멀티 스레드의 특징인 스레드는 긴밀하게 연결되어 있기 때문에, 한 스레드 ( 한 탭 ) 에 문제가 생기면 

전체 프로세스에 영향이 가기 때문입니다.

 

 

 


참고자료
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://cocoon1787.tistory.com/688
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4