[ CS / OS ] Multi-Process & Multi-Thread

황승환·2022년 2월 9일
0

CS

목록 보기
28/60

Multi-Process & Multi-Thread

Multi-Process


멀티 프로세스는 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

장점

  • 프로세스의 독립적인 성격 덕분에 작업을 처리하던 중에 하나의 프로세스에서 문제가 발생하더라도 다른 프로세스에는 영향을 주지 않는다.

단점

  • Context Switch에서의 Overhead
    - Context Switch 과정에서 캐시 메모리 초기화 등과 같이 무거운 작업이 진행되기 때문에 많은 시간이 소요된다.
    • 프로세스는 각각 독립된 메모리 영역을 사용하기 때문에 프로세스 사이에서 공유하는 메모리 없기 때문에 Context Switch 시 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 한다.
  • 프로세스 간의 복잡한 통신 기법 (IPC)
    - 프로세스는 각각의 독립된 메모리 영역을 할당 받았기 때문에 하나의 프로그램에 속하는 프로세스들 간의 변수를 공유할 수 없다.

Multi-Thread


멀티 스레드는 하나의 응용 프로그램을 하나의 프로세스 안에 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것이다. 웹 서버는 대표적인 멀티 스레드 응용 프로그램 중 하나이다.

장점

  • 시스템 처리량 증가 (처리 비용 감소)
    - 프로세스를 이용하여 동시에 처리하던 일을 스레드로 구현할 경우, 메모리 공간과 시스템 자원의 소모가 줄어들게 된다.
  • 간단한 통신 방법으로 인한 프로그램 응답 시간 단축
    - 스레드 간의 통신이 하나의 프로세스 안에서 전역 변수의 공간이나 동적으로 할당된 공간인 Heap을 통해 별도의 과정 없이 가능하다.
    • 멀티 프로세스에 비해 통신 방법이 간단하다.
  • 빠른 Context Switch
    - 스레드의 Context Switch는 프로세스와 달리 캐시 메모리를 비울 필요가 없기 떄문에 더 빠르다.
    • 시스템의 throughput이 향상되고 자원 소모가 줄어들며 자연스럽게 프로그램의 응답 시간이 단축된다.

단점

  • 동기화 작업의 필요
    - 멀티 프로세스를 기반으로 프로그래밍을 할 때에는 프로세스 간 공유하는 자원이 없기 떄문에 동일한 자원에 동시에 접근하는 일이 없지만, 멀티 스레딩을 기반으로 프로그래밍을 할 때에는 이 부분을 신경써야 한다.
    • 서로 다른 스레드가 Data, Heap 영역을 공유하기 때문에 다른 스레드에 의해 사용 중인 변수나 자료구조가 변경될 수 있다.
    • 동기화 작업을 통해 작업 처리 순서를 컨트롤하고 공유 자원에 대한 접근을 컨트롤해야 한다. 이때 병목 현상(Bottle Neck)이 발생하여 성능 저하가 나타나지 않도록 해야 한다.
      (과도한 Lock -> Bottle Neck)
  • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.
    - 스레드는 프로세스 내에서 자원을 공유하기 때문이다.

정리

Multi-Process									Multi-Thread
많은 메모리 공간, 많은 CPU 시간 차지, 느린 문맥 전환	|	적은 메모리 공간, 빠른 문맥 전환
하나의 프로세스가 고장나도 다른 프로세스에 영향 X		|	하나의 스레드만 고장나도 전체 프로세스에 영향
									동시에 여러 작업을 처리

멀티 프로세스와 멀티 스레드는 위와 같이 서로 다른 장단점을 가지고 있기 때문에 대상 시스템의 특징에 따라 적합한 동작 방식을 선택하고 적용해야 한다.

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글