본문 바로가기
운영체제(OS)

[OS] "Multi Process / Multi Thread” Multi의 의미와 특징 및 차이점

by 도전하는 린치핀 2024. 7. 3.

1. Multi Process

1-1.  개념

  • 두개 이상의 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것(병렬적 처리)
  • 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용한다.
  • 즉, 멀티 프로세스는 운영체제에서 하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있도록 하는 기술
  • 예를 들면, 크롬과 같은 웹 브라우저에서 여러 개의 탭이나 새 창을 띄울 때, 하나의 프로그램에서 여러 개의 프로세스를 사용한다.
  • 이때, 각 브라우저 탭은 같은 브라우저 프로그램을 실행한 것이지만, 각기 다른 사이트를 실행하기 때문이다.

1-2. 장점

1. 프로그램 안정성

  •  각 프로세스가 독립적인 메모리 공간을 가지기 때문에, 하나의 프로세스가 비정상적으로 종료되어도 다른 프로세스에는 영향을 주지 않는다.
  • 이를 통해, 프로그램의 안전성을 보장할 수 있다.
  • 예를들어, 웹 브라우저를 사용할 때, 여러 개의 탭 중 하나의 탭이 동작하지 않는 경우에서 심각하지 않은 에러의 경우 동작하지 않는 탭을 제외한 다른 탭은 사용 가능하다.

2. 프로그램 병렬성

  • 멀티 프로세스는 여러 개의 프로세서를 활용하여 병렬적으로 작업을 처리하기 때문에 성능을 향상 시킬 수 있다
  • 예를 들어, 비디오 및 이미지 처리 작업에서 여러 개의 코어나 CPU에 작업을 분산시켜 빠르게 처리할 수 있다.

3. 시스템 확장성

  • 멀티 프로세스는 각 프로세스가 독립적이므로, 새로운 기능이나 모듈을 추가하거나 수정 시 다른 프로세스에 영향을 주지 않기 때문에 시스템의 규모 확장이 쉽다.
  • 이를 이해하기 위한 예시는, 소프트웨어 관점에서 프로세스를 보는 것이 아닌 네트워크 관점에서 여러 개의 서버를 두고 앞에 로드 밸런서를 두는 것을 생각하면 쉽다.
  • 클라이언트의 요청은 성능이 가장 좋은 서버(로드밸런서)에 도착하고 로드밸런서는 여러 대의 서버에 이 트래픽을 분산시킨다.
  • 따라서, 새로운 서버를 추가한다면 추가적인 작업 없이 로드밸런서와 연결된 서버만 추가하면 되기 때문에 매우 확장성이 크다
  • 멀티 프로세스를 사용하여 여러 대의 서버에 요청을 분산시켜 처리함으로써, 시스템의 규모를 쉽게 확장할 수 있으며, 부가로 서버의 장애나 다운타임을 최소화할 수 있게 되는 것이다.

1-3. 단점

1. Context Switching Overhead

  • 멀티테스킹을 구성하는데 가장 핵심 기술인 Context Switching이 자주 발생하여 성능 저하가 발생할 수 있다.
  • 독립된 메모리 영역이기 때문에 작업량이 많을수록 오버헤드가 발생할 수 있다.
  • Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생한다.

2. 자원 공유 비효율성

  • 각 프로세스는 독립적인 메모리 공간을 가지므로, 결과적으로 메모리 사용량이 증가하게 된다.
  • 이때, 각 프로세스간 자원 공유가 필요하면 IPC(Inter-Process Communication)라는 복잡한 통신 기법을 사용해야 한다.
  • IPC란 운영체제 상에서 실행 중인 프로세스 간에 정보를 주고받는 메커니즘을 말한다.  그런데 IPC 자체로 오버헤드가 발생한다. 
  • 예를 들어, 파이프나 소켓과 같은 IPC 기법은 데이터를 복사하거나 버퍼링하는 과정에서 성능 저하가 발생할 수 있기 때문이다. 또한 코드의 복잡도를 증가시킨다.

 

2. Multi Thread

2-1. 개념

  • 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다.
  • 웹 서버는 사용자가 서버 데이터베이스에 자료를 요청하는 동안 브라우저의 다른 기능을 이용할 수 있기 때문에 멀티 스레드의 대표적인 예시다.
  • 위의 멀티프로세스의 경우 웹 브라우저의 탭이나 새 창을 예시로 들었지만, 멀티 스레드의 경우 하나의 탭에서 브라우저 이벤트 루프, 네트워크 처리 등 기타 작업을 관리 및 처리하는 것을 예로 들 수 있다.

2-2. 장점

1. 생성/삭제 등의 작업에서 프로세스보다 가볍다.

  • 기본적으로 스레드는 프로세스 내에 있는 영역이기 때문에 프로세스보다 가볍다,
  • 또한 스레드는 프로세스와 다르게 코드, 데이터, 스택 영역을 제외한 나머지 자원을 공유하기 때문에 기본적으로 내장되어 있는 데이터 용량이 프로세스보다 작다.
  • 그래서 스레드를 생성하고 삭제할 때, 프로세스 내부의 자원만을 관리하면 되기 때문에 프로세스의 생성/삭제에 비해 매우 가볍다.

2. 자원의 효율성 증가

  • 멀티 스레드는 하나의 프로세스 내 여러 개의 스레드가 생성되기 때문에 힙 영역과 같은 공유 메모리에 대해 스레드 간 자원 공유가 가능하다.
  • 이를 통해 프로세스 간 IPC와 같은 복잡한 통신 없이 데이터를 공유할 수 있기 때문에 자원의 효율적인 활용이 가능해 시스템 자원 소모가 줄어든다.

3. Context Switching 비용 감소

  • 스레드 또한 콘텍스트 스위칭 오버헤드가 발생할 수 있지만 상대적으로 프로세스의 콘텍스트 스위칭보다 훨씬 적은 오버헤드가 발생하여 비용이 낮다는 장점이 있다.
  • 프로세스 콘텍스트 스위칭의 경우 CPU 캐시에 있는 모든 내용을 초기화하고 새로운 프로세스 정보를 CPU 캐시에 적재해야 하는 반면, 스레드의 경우 공유하는 자원을 제외한 스레드 정보만 교체하면 되기 때문에 더 낮은 비용으로 콘텐스트 스위칭을 완료할 수 있다.

3. 응답 시간 단축

  • 스레드는 프로세스 내 스택 영역을 제외한 메모리 영역을 공유하기 때문에 통신 비용이 적다.
  • 힙 영역을 공유하기 때문에 공유 데이터를 주고 받을 수 있기 때문에 응답 시간이 단축된다. 

2-3. 단점

1. 안정성 문제

  • 멀티 스레드의 경우 하나의 스레드가 문제가 발생하면 다른 스레드에도 영향을 줄 수 있어 전체 프로그램이 종료될 수 있다.
  • 이를 해결하기 위해, 개발자는 적절한 예외처리, 에러 발생 시 새로운 스레드 생성, 스레드 풀에서 잔여 스레드 가져오기 등 프로그램 종료를 방지할 수 있다.
  • 위의 에러 발생 시 새로운 스레드를 생성하거나 스레드 풀에서 잔여 스레드를 가져올 때 추가적인 비용이 발생할 수 있다.

2. 동기화로 인한 성능 저하

  • 멀티 스레드의 경우 여러 개의 스레드가 공유 자원에 동시에 접근 할 수 있기 때문에 동기화 문제가 발생할 수 있다.
  • 여러 스레드가 동시에 한 자원을 변경한다면 의도하지 못한 에러가 발생할 수 있기 때문에 스레드 간 동기화는 데이터 접근을 제어하기 위해 필수적인 작업이다.
  • 동기화 작업은 여러 스레드들이 자원에 대한 접근을 순차적으로 통제하는 것으로, 병목 현상이 일어나 성능 저하될 가능성이 있다.
  • 이에 대한 내용은 아래의 포스팅에 정리했으니 확인해보고 이해하고 넘어가자.
 

[OS] 동기화 메커니즘(Synchronization Mechanisms)과 스핀락(Spinlock), 뮤텍스(Mutex), 세마포어(Semaphore)

0. 경쟁 상태와 임계 구역0-1. 경쟁 상태 (Race Condition)경쟁 상태는 여러 개의 프로세스가 병행하여 공유 자원을 읽고 쓸 때 발생하는 상황공유 자원 접근 순서에 따라 실행 결과가 매번 달라지는

rnclf1005.tistory.com

3. 데드락(교착 상태) 발생 

  • 데드락은 다수의 프로세스나 스레드가 서로 자원을 점유하고 다른 프로세스나 스레드가 점유한 자원을 기다리는 상황에서 발생한다.
  • 멀티 스레드 상황에서 여러 개의 스레드가 서로 자원을 점유하기 위해 대기하면서 무한 루프와 같은 증상을 보인다.
  • 멀티 프로세스 상황에서 또한 IPC를 활용한 자원을 공유할 때 데드락이 발생할 수 있다.
  • 이에 대한 내용은 아래의 포스팅에 정리했으니 확인해보고 이해하고 넘어가자.
 

[OS] DeadLock(교착상태) 발생과 해결 방안

1. DeadLock (교착상태) 란?교착상태란 여러 프로세스나 스레드가 서로 자원을 기다리며 실행이 멈추는 상태를 말한다.예를 들어, 프로세스 A가 프로세스 B의 자원을 요청할 때 프로세스 B도 프로세

rnclf1005.tistory.com

 

3. 멀티 프로세스 / 멀티 스레드 

3-1. 멀티 프로세스 / 멀티 스레드

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

3-2. 멀티 프로세스에서 가능한 작업을 하나의 프로세스 내 스레드로 나눠 작업하는 이유

  • 아래의 멀티 스레드의 장점을 더 극대화 하기 위해 스레드로 나눠 작업한다고 생각하면 될 것 같다.
    • 운영 체제가 시스템 자원을 효율적으로 관리하기 위해 스레드를 사용한다.
    • 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들기 때문에 자원을 효율적으로 관리할 수 있다.
    • 또한, 프로세스 간 통신(IPC)보다 스레드 간 통신 비용이 적으므로 작업들 간 통신 부담이 줄어든다.

3-3. 무조건적으로 스레드를 분할하여 멀티 스레드를 사용하는 것이 좋은가?

  • 스레드를 활용하면 자원의 효율성이 증가할 수 있지만 멀티 스레드의 단점이 발생할 수 있기 때문에 주의해야 한다
  • 동기화 매커니즘과 데드락에 주의하여 멀티 스레드 환경을 구성해야 한다.