멀티 프로세스

박영준·2023년 8월 18일
0

OS (운영체제)

목록 보기
4/6

멀티 프로세스 vs 멀티 쓰레드 는 개발자 면접에서 자주 나오는 질문 중의 하나!

1. 정의

  • OS에서 하나의 응용 프로그램에 대해 동시에 여러 개의 Process 를 실행할 수 있게 하는 기술
    • 보통 하나의 프로그램 실행에 대해 하나의 Process가 메모리에 생성되지만, 부가적인 기능을 위해 여러 개의 Process를 생성하는 것!

멀티 프로세스는 '한 어플리케이션에 대한 처리방식' 이라고 보면 된다.
단순히 프로그램을 여러개 띄워놓는 것이 아니라, 언제 어느때에 어떤 방식으로 처리하느냐에 따라 다른 것으로 이해해야 한다.

2. 구조

하나의 부모 Process가 여러 개의 자식 Process를 생성함으로써, 다중 Process를 구성하는 구조

  • 한 Process는 실행되는 도중 Process 생성 시스템 콜을 통해 새로운 Process들을 생성할 수 있는데,

    • 다른 Process를 생성하는 Process를 부모 프로세스(Parent Process)
    • 다른 Process에 의해 생성된 Process를 자식 프로세스(Child Process)
  • PID (Process ID)

    • 부모 프로세스와 자식 프로세스는 각각 고유한 PID(Process ID)를 가지고 있다.

      • 부모 프로세스 : 자식 프로세스의 PID를 알고 있으며, 이를 통해 자식 프로세스를 제어할 수 있다.
      • 자식 프로세스 : 부모 프로세스의 PID와 PPID(Parent Process ID)를 알고 있으며, 이를 통해 부모 프로세스와의 통신이 가능하다.

      단, 통신이 가능할 뿐, 부모 프로세스와 자식 프로세스는 엄연히 서로 다른 프로세스이므로
      독립적으로 실행되고 독립적인 메모리 공간을 가지고 있기 때문에, 서로 다른 작업을 수행한다.

      예시로 웹 브라우저의 상단 탭(Tab) 이나 새 창을 들 수 있다.
      각 브라우저 탭은 같은 브라우저 프로그램 실행이지만, 각기 다른 사이트를 실행한다.

3. 장단점

1) 장점

(1) 프로그램 안전성

  • 멀티 Process는 각 Process가 독립적인 메모리 공간을 가지므로, 한 Process가 비정상적으로 종료되어도 다른 Process에 영향을 주지 않는다.
    따라서, 프로그램 전체의 안전성을 확보할 수 있다는 장점이 있다.

  • 예시

    • 크롬 브라우저에서 여러 개의 탭을 띄우고, 여러 곳의 웹사이트를 방문해 서비스를 이용한다고 가정하자.
      이때, 어느 한 탭의 웹사이트에서 무언가 잘못되어 먹통이 되었더라도, 다른 탭은 별 문제없이 이용이 가능할 것이다.
      이는 자식 프로세스가 여러개 생성되어 메모리에 별도로 관리되기 때문이다.

(2) 프로그램 병렬성

  • 멀티 Process와 여러 개의 CPU 코어를 활용하여, 다중 CPU 시스템에서 각 Process를 병렬적으로 실행하여 성능을 향상시킬 수 있다.

    • 각 Process 가 독립된 메모리 공간을 사용하기 때문에, 병렬 실행이 가능
  • 예시

    • 이미지 처리나 비디오 인코딩과 같은 작업을 여러 개의 코어나 CPU에 분산시켜 빠르게 처리할 수 있다.

단, 멀티 Thread로 구성하는 것이 멀티 Process로 구성하는 것보다 훨씬 효율적이고 빠르기 때문에,
멀티 Process로 성능을 올리는 일은 거의 없다고 보면 된다.

(3) 시스템 확장성

  • 멀티 Process는 각 Process가 독립적이므로, 새로운 기능이나 모듈을 추가/수정할 때 다른 Process에 영향을 주지 않는다.
    따라서, 시스템의 규모를 쉽게 확장할 수 있다.

  • 예시

    • 멀티 Process 를 사용해서 여러 대의 서버에 요청을 분산 처리하게 될 경우,
      시스템의 규모를 쉽게 확장할 수 있으면서 서버의 장애나 다운타임을 최소화 할 수 있다.

2) 단점

(1) Context Switching Overhead

  • Context Switching 과정에서 성능 저하가 올 수 있다.

    • Process ontext Switching 의 경우, 빈번한 Context Switching 작업으로 인해 비용 오버헤드가 발생할 수 있게 된다.
      (CPU는 다음 프로세스의 정보를 불러오기 위해 메모리를 검색하고, CPU 캐시 메모리를 초기화하며, 프로세스 상태를 저장하고, 불러올 데이터를 준비)

    • Thread ontext Switching 의 경우, 프로세스 스위칭 보다 가벼워 훨씬 빠르고 좋다.

  • 따라서, 멀티 Process 환경에서는 Context Switching Overhead를 최소화하는 방법이 중요하다.
    (프로세스 수를 적정하게 유지, I/O 바운드 작업이 많은 프로세스와 CPU 바운드 작업이 많은 프로세스를 분리하여 관리, CPU 캐시를 효율적으로 활용 등...)

(2) 자원 공유 비효율성

멀티 Process는 각 Process가 독립적인 메모리 공간을 가지므로, 결과적으로 메모리 사용량이 증가하게 된다.
이때, 각 Process간에 자원 공유가 필요할 경우 Process 사이의 IPC(Inter-Process Commnuication)을 사용하여야 한다.
(IPC 는 운영체제 상에서 실행 중인 프로세스 간에 정보를 주고받는 메커니즘(사용하기에 어렵고 복잡한 통신 기법이다). IPC 자체로도 Overhead가 발생해버린다.)


참고: 멀티 프로세스 vs 멀티 스레드 비교 💯 완전 총정리

profile
개발자로 거듭나기!

0개의 댓글