

멀티 프로세스는 OS 에서 하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 기술 을 말한다.
부가적인 기능을 위해 여러개의 프로세스를 생성하는 것이다.
보통 하나의 프로그램 실행에 대해 하나의 프로세스가 메모리에 생성된다.
멀티 프로세스의 내부는 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성함으로서 다중 프로세스를 구성 하는 구조이다.
부모 프로세스와 자식 프로세스는 각각 고유한 PID 를 가지고 있다.
부모 프로세스는 자식 프로세스의 PID 를 알고 있으며 이를 통해 자식 프로세스를 제어한다.
자식 프로세스또한 부모 프로세스의 PID 와 PPID(Parent Process ID) 를 알고 있어 부모 프로세스와 통신이 가능하다.
다만 통신이 가능할 뿐 부모와 자식은 엄연히 서로 다른 프로세스이기 때문에 독립적인 메모리 공간을 가지고 있어 서로 다른 작업을 수행한다.
( ex ) 웹 브라우저의 상단 Tab / 새 창 : 같은 브라우저지만 각기 다른 사이트 실행
멀티 프로세스는 하나가 비정상적으로 종료가 되어도 다른 프로세스에 영향을 주지 않는다.
각 프로세스가 독립적인 메모리 공간을 가져서 메모리에 별도로 관리 되기 때문이다.
다만, 이 부분은 멀티 스레드, 멀티 프로세스 둘의 장점이다.
그리고 멀티 스레드로 구성하는 것이 멀티 프로세스로 구성하는 것보다 훨씬 효율적이고 빠르기 때문에 멀티 프로세스로 성능을 올리는 행위는 거의 없다.
분산 서버
: 대규모의 웹 서비스에서는 수많은 요청을 동시 처리를 위해 여러 대의 서버 를 두고 Load Balancer 와 같은 장비로 클라이언트 요청 트래픽을 분산시킨다.
이 때 여러 대 서버는 컴퓨터 여러 대일 수도 있지만, 1대의 성능 좋은 컴퓨터에 여러 서버 프로세스를 두는 것 을 말할 수도 있다.
이렇게 멀티 프로세스를 사용하여 여러 서버 프로세스를 두어 요청을 분산시켜 처리함으로서, 시스템의 규모를 쉽게 확장 할 수 있고, 부가로 서버의 장애나 다운타임을 최소화 할 수 있게 된다.
멀티 태스킹을 구성하는데 핵심 기술인 Context Switching 과정에서 성능 저하가 올 수 있다.
특히 프로세스를 Context Switching 을 하면,
이 과정을 하기 때문에 빈번한 컨텍스트 스위칭은 오버헤드가 발생할 수 있다.
오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간, 메모리
가령 A 처리로만 10초 걸릴 것을 안전성을 고려해 B 처리를 추가하면 15초가 걸린다.
이때 오버헤드는 5초이다.
멀티 프로세스는 각 프로세스가 독립적인 메모리 공간을 가지므로 결과적으로 메모리 사용량이 증가한다.
각 프로세스 간에 자원 공유가 필요할 경우 복잡한 통신 기법인 IPC(Inter-Process Commnuication) 을 사용해야 한다.
IPC : 운영체제 상에서 실행중인 프로세스 간에 정보를 주고받는 메커니즘. 파이프, 소켓, 메세지 큐 등 다양한 방법이 사용된다. 그런데 IPC 자체로 오버헤드가 발생한다.
파이프나 소켓 같은 IPC 기법은 데이터를 복사하거나 버퍼링을 하는 과정에서 성능 저하가 발생할 수 있기 때문이다. 또한 코드의 복잡도를 증가시킨다.
음악을 들으며 웹서핑을 하고, 메신저의 메세지를 확인할 수 있는 이유는 컴퓨터가 자원을 효율적으로 사용하는 멀티 태스킹(Multi Tasking) 기술 덕분이다.
멀티 태스킹이란 컴퓨터에서 여러 작업을 동시에 실행하는 능력을 말한다.
즉, OS 를 통해 CPU 가 작업하는데 필요한 자원을 프로세스 또는 스레드 간에 나누는 행위가 멀티 태스킹이다.
두 가지 이상 작업을 동시에 처리할 수 있는 이유가 이러한 자원 분담 원리 때문이다.



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


멀티 태스킹
: 단일 CPU 에서 여러 개의 작업을 동시에 번갈아가며 처리하여 여러 개의 작업을 동시에 수행하는 것처럼 보이게 하는 것이다.
둘은 서로 다른 동시 처리 방법이기 때문에 조합하여 시너지 효과를 누릴 수 있다.

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

하나의 작업에 대한 멀티 프로세싱 + 멀티 태스킹
멀티 프로세스
: 하나의 응용 프로그램 을 여러 프로세스로 분리하여 실행하는 것
-> 프로세스가 멀티라 동시에 실행되므로 하나의 프로세스가 죽어도 프로그램은 죽지 않아 안정성이 높아진다.
부모 프로세스 + 여러 자식 프로세스로 구성
멀티 프로세싱
: 여러 프로세서 ( CPU ) 를 사용하여 각각의 작업을 동시 에 처리하는 것
-> 전체 처리 속도 빨라짐