TIL / JAVA 5주차(2) / 멀티 프로세스 / 멀티 태스킹 / 멀티 프로세싱

병아리코더 아카이브·2023년 9월 11일

JAVA

목록 보기
16/20
post-thumbnail

멀티 프로세스 (Multi Process)

  • 멀티 프로세스는 OS 에서 하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 기술 을 말한다.

  • 부가적인 기능을 위해 여러개의 프로세스를 생성하는 것이다.

보통 하나의 프로그램 실행에 대해 하나의 프로세스가 메모리에 생성된다.

  • 멀티 프로세스의 내부는 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성함으로서 다중 프로세스를 구성 하는 구조이다.

  • 부모 프로세스와 자식 프로세스는 각각 고유한 PID 를 가지고 있다.
    부모 프로세스는 자식 프로세스의 PID 를 알고 있으며 이를 통해 자식 프로세스를 제어한다.
    자식 프로세스또한 부모 프로세스의 PID 와 PPID(Parent Process ID) 를 알고 있어 부모 프로세스와 통신이 가능하다.

  • 다만 통신이 가능할 뿐 부모와 자식은 엄연히 서로 다른 프로세스이기 때문에 독립적인 메모리 공간을 가지고 있어 서로 다른 작업을 수행한다.
    ( ex ) 웹 브라우저의 상단 Tab / 새 창 : 같은 브라우저지만 각기 다른 사이트 실행


멀티 프로세스의 장점

1. 프로그램 안정성

  • 멀티 프로세스는 하나가 비정상적으로 종료가 되어도 다른 프로세스에 영향을 주지 않는다.

  • 각 프로세스가 독립적인 메모리 공간을 가져서 메모리에 별도로 관리 되기 때문이다.

2. 프로그램 병렬성

  • 멀티 프로세스와 여러 개 CPU 코어를 활용해 시너지를 합치면 다중 CPU 시스템에서 각 프로세스를 병렬적으로 실행하여 성능을 향상시킬 수 있다.
    ( ex ) 이미지 처리, 비디오 인코딩 같은 작업을 여러 개의 코어나 CPU 에 분산시켜 빠르게 처리한다.

다만, 이 부분은 멀티 스레드, 멀티 프로세스 둘의 장점이다.
그리고 멀티 스레드로 구성하는 것이 멀티 프로세스로 구성하는 것보다 훨씬 효율적이고 빠르기 때문에 멀티 프로세스로 성능을 올리는 행위는 거의 없다.

3. 시스템 확장성

  • 멀티 프로세스는 각 프로그램이 독립적이어서 새로운 기능, 모듈을 추가하거나 수정할 때 다른 프로세스에 영향을 주지 않는다.
    이는 즉 시스템의 규모를 쉽게 확장할 수 있다.
    ( ex ) 분산 서버를 이용함으로서 시스템 규모 확장

분산 서버
: 대규모의 웹 서비스에서는 수많은 요청을 동시 처리를 위해 여러 대의 서버 를 두고 Load Balancer 와 같은 장비로 클라이언트 요청 트래픽을 분산시킨다.
이 때 여러 대 서버는 컴퓨터 여러 대일 수도 있지만, 1대의 성능 좋은 컴퓨터에 여러 서버 프로세스를 두는 것 을 말할 수도 있다.
이렇게 멀티 프로세스를 사용하여 여러 서버 프로세스를 두어 요청을 분산시켜 처리함으로서, 시스템의 규모를 쉽게 확장 할 수 있고, 부가로 서버의 장애나 다운타임을 최소화 할 수 있게 된다.


멀티 프로세스의 단점

1. Context Switching Overhead

  • 멀티 태스킹을 구성하는데 핵심 기술인 Context Switching 과정에서 성능 저하가 올 수 있다.

  • 특히 프로세스를 Context Switching 을 하면,

  1. CPU 는 다음 프로세스의 정보를 불러오기 위해 메모리를 검색
  2. CPU 캐시 메모리 초기화
  3. 프로세스 상태 저장
  4. 불러올 데이터 준비

이 과정을 하기 때문에 빈번한 컨텍스트 스위칭은 오버헤드가 발생할 수 있다.

오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리
가령 A 처리로만 10초 걸릴 것을 안전성을 고려해 B 처리를 추가하면 15초가 걸린다.
이때 오버헤드는 5초이다.

  • 따라서 멀티 프로세스 환경에서는 이런 오버헤드를 최소화하는 방법이 중요하다.
    이를 위해 프로세스 수를 적정하게 유지하거나, CPU 캐시를 효율적으로 활용하는 등의 여러 방법이 존재한다.

2. 자원 공유 비효율성

  • 멀티 프로세스는 각 프로세스가 독립적인 메모리 공간을 가지므로 결과적으로 메모리 사용량이 증가한다.

  • 각 프로세스 간에 자원 공유가 필요할 경우 복잡한 통신 기법인 IPC(Inter-Process Commnuication) 을 사용해야 한다.

IPC : 운영체제 상에서 실행중인 프로세스 간에 정보를 주고받는 메커니즘. 파이프, 소켓, 메세지 큐 등 다양한 방법이 사용된다. 그런데 IPC 자체로 오버헤드가 발생한다.
파이프나 소켓 같은 IPC 기법은 데이터를 복사하거나 버퍼링을 하는 과정에서 성능 저하가 발생할 수 있기 때문이다. 또한 코드의 복잡도를 증가시킨다.



멀티 태스킹 (Multi Tasking)

  • 음악을 들으며 웹서핑을 하고, 메신저의 메세지를 확인할 수 있는 이유는 컴퓨터가 자원을 효율적으로 사용하는 멀티 태스킹(Multi Tasking) 기술 덕분이다.

  • 멀티 태스킹이란 컴퓨터에서 여러 작업을 동시에 실행하는 능력을 말한다.

  • 즉, OS 를 통해 CPU 가 작업하는데 필요한 자원을 프로세스 또는 스레드 간에 나누는 행위가 멀티 태스킹이다.

  • 두 가지 이상 작업을 동시에 처리할 수 있는 이유가 이러한 자원 분담 원리 때문이다.


프로세싱의 발전 과정

1. 단일 프로세스

  • 초창기 컴퓨터는 한번에 하나의 프로그램만을 할 수 있었다.
  • 프로그램 실행 도중 I/O 작업과 같은 일이 발생하면 CPU 는 프로세스를 멈추고 끝날때까지 기다리며 놀아버려 CPU 사용률도 효율적이지 못했다.

2. 멀티 프로그래밍

  • 단일 프로세스의 문제를 해결하기 위해 여러개의 프로그램을 메모리에 올려놓고 하나의 CPU 에서 번갈아가며 동시에 실행하는 방안이 생겼다.
  • 멀티 프로그래밍은 여러 개의 프로그램이 동시에 실행된다는 의미로서 CPU 사용률을 극대화하는 것이 목적이다.
  • 프로세스#1 이 I/O 작업을 만나면 프로세스#2 작업을 시작하는 식으로 프로세스가 멈추지 않게 한다.
  • 그러나 프로세스#1 의 CPU 사용 시간이 길어지면 프로세스#2 는 계속 대기해야 해서 실행할 기회조차 못 얻게 되는 문제점이 존재하였다.

3. 멀티 태스킹

  • 멅티 프로그래밍의 취지는 좋았으나 어느 한 프로세스가 모두 실행되어야 다음 프로세스가 실행될 수 있는 한계점이 있었다.
  • 이러한 점을 해결하기 위해 프로세스는 CPU 를 사용할 때 아주 짧은 시간 ( quantum ) 만 실행되도록 하여 각 프로그램의 작업을 아주 작은 단위로 번갈아 처리하면서, 작업 응답 시간을 최소화 시키는 멀티 태스킹이 탄생하였다.
  • 이때 잘게 나뉘어진 프로세스끼리 작업이 스위칭 되는 것을 Context Switching 이라고 한다.

멀티 태스킹 장점

1. 빠른 반응성 제공

  • CPU 가 잘게 나눈 각 작업들을 빠르게 번갈아가며 수행함으로서, 여러 작업을 동시에 처리하는 것처럼 보이게 만든다.
  • 이로 인해 사용자에게 더 빠른 반응성을 제공하여 정말로 동시에 프로그램이 실행되는 것처럼 느끼게 한다.

2. 문제 해결 용이성

  • 작업을 나누었기 때문에 예기치 않은 문제가 발생했을 때, 해당 작업만 중지할 수 있게 된다.
  • 이로 인해 전체 시스템이 멈추는 것을 방지할 수 있다.

3. 멀티 프로세서의 효율적인 활용

  • 멀티 프로세싱 또는 멀티 코어를 사용하는 시스템에서 여러 개의 프로세서 ( CPU ) 가 동시에 작업을 효율적으로 처리할 수 있다.

4. 프로세스 우선순위 조절

  • 프로세스 간 우선순위가 높은 작업은 더 자주 실행되어, 더 빠른 처리를 할 수 있다.

하지만 프로세스끼리 스위칭 하는 작업은 우리가 생각하는 것보다 꽤나 무거운 작업에 해당되기 때문에 Context Switching 이 자주 일어나게 될 경우 오히려 성능 이슈가 발생할 수 있다.



멀티 프로세싱 (Multi Processing)

  • 옛날 컴퓨터의 CPU 는 싱글코어였기 때문에 여러 작업을 동시에 처리하기 위해 멀티 태스킹과 같은 기술을 차용해 작업을 처리하도록 발전했다.
  • 그러나 시대가 발전함과 동시에 CPU 코어의 발열 한계로 인해 코어 깡 클럭을 높이지 않고 코어를 늘리는 방식으로 듀얼 코어, 쿼드 코어 같은 코어 갯수가 늘어난 제품들이 생겨났다.
  • 여러개의 CPU 코어가 동시에 작업을 처리하는 것을 멀티 프로세싱 ( Multi Processing ) 이라 한다.

멀티 프로세싱과 멀티 태스킹

  • 멀티 프로세싱
    : 앞서 말했듯이 여러 개의 CPU 코어가 동시에 작업을 처리하는 것을 말한다.
    여러 개의 프로세서가 병렬로 작업을 수행하므로 단일 프로세스보다 빠른 처리 속도를 보장한다.
    즉, 여러 개의 CPU 는 각각 자기가 맡을 작업을 병렬로 수행한다.

  • 멀티 태스킹
    : 단일 CPU 에서 여러 개의 작업을 동시에 번갈아가며 처리하여 여러 개의 작업을 동시에 수행하는 것처럼 보이게 하는 것이다.

  • 둘은 서로 다른 동시 처리 방법이기 때문에 조합하여 시너지 효과를 누릴 수 있다.

여러 작업에 대한 멀티 프로세싱 + 멀티 태스킹

하나의 작업에 대한 멀티 프로세싱 + 멀티 태스킹


멀티 프로세싱과 멀티 프로세스

  • 멀티 프로세스
    : 하나의 응용 프로그램 을 여러 프로세스로 분리하여 실행하는 것
    -> 프로세스가 멀티라 동시에 실행되므로 하나의 프로세스가 죽어도 프로그램은 죽지 않아 안정성이 높아진다.
    부모 프로세스 + 여러 자식 프로세스로 구성

  • 멀티 프로세싱
    : 여러 프로세서 ( CPU ) 를 사용하여 각각의 작업을 동시 에 처리하는 것
    -> 전체 처리 속도 빨라짐

출처 : https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-multi-programming-tasking-processing

0개의 댓글