[OS] Multi Process vs Multi Thread

GonnabeAlright·2021년 11월 24일
0
post-thumbnail

Multi Process

  • 하나의 응용 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것,
  • fork를 통해 프로세스를 복사한다.

장점

  • 여러 개의 자식 프로세스 중 하나에 문제 발생 시, 그 자식 프로세스만 죽는 것 이상으로 다른 영향은 없다. (안전하다.)

단점

  • Context Switching에서의 Overhead(과부하)

    • 프로세스는 각 독립된 메모리 영역을 할당받았기 때문에 공유하는 메모리가 없다. 따라서 캐시 메모리 초괴화 등의 무거운 작업이 진행되고 많은 시간 소모 등 오버헤드가 발생할 수 있다.
  • 프로세스 간 통신 기법 IPC

    • 프로세스는 각 독립된 메모리 영역을 할당 받았기 때문에 프로세스들 사이에서 변수나 자료구조를 공유할 수 없다.

Multi Thread

  • 하나의 응용 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것.
  • 윈도우, 리눅스 등 많은 OS들이 멀티 프로세싱을 지원하지만 기본은 멀티 스레딩이다.
  • Web Server는 대표적인 멀티 스레드 응용 프로그램이다.

장점

  • 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
  • 스레드 간 통신 시, 전역 변수의 공간 or 동적으로 할당된 공간인 Heap 영역을 이용하여 데이터를 주고 받음으로 통신 방법이 간단하다.
  • Context Switching시에, 캐시 메모리를 비울 필요가 없기에 비용이 적고 빠르다. 그래서 시스템 처리량이 향상되고 자원 소모가 줄고 자연스럽게 프로그램 응답시간이 단축된다.

단점

  • 서로 다른 스레드가 Data, Heap 영역 등을 공유하기에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 이상한 값을 읽어오거나 수정 가능하다. 자원 공유의 문제가 발생한다. (동기화)
  • 하나의 스레드에 문제가 생기면 전체 프로세스에 문제가 생긴다.
  • 디버깅이 까다롭다.

✅ 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠르지만, 오류가 발생 시 스레드가 종료될 때 전체 스레드가 종료될 수 있다는 점과 동기화의 문제를 갖고 있다.

✅ 멀티 프로세싱 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상 수행한다는 장점이 있지만 멀티 스레드보다 많은 메모리 공간 차지와 CPU시간을 점유한다는 단점이 있다.

작업을 동시 수행한다는 점에서 둘은 같지만 적용해야 하는 시스템에 따라 적/부적합이 구분된다.

0개의 댓글