본문 바로가기

CS/운영체제

멀티 프로세스 vs 멀티 스레드

멀티 프로세스

멀티 프로세스는 여러개의 프로세스를 사용해서 작업을 병렬적으로 수행하는 것이다.

장점

  • 독립된 구조로 안전성이 높다는 장점이 있다.
  • 프로세스 중 하나에 에러가 발생하여도 다른 프로세스에 영향을 주지 않는다.

    예를 들어 하나의 탭에서 문제가 발생하여도 다른 탭에는 영향을 주지 않는다.

문제점

  • 독립된 메모리 영역이기 때문에 작업량이 많을수록(Context Switching시 캐시 메모리 초기화가 필요) 오버헤드가 발생하여 성능저하가 발생 할 수 있다.
  • 프로세스 사이의 통신이 복잡하다.

멀티스레드

멀티스레드는 여러개의 스레드를 사용해서 작업을 병렬적으로 수행한다.

장점

  • 시스템 자원소모 감소 (자원의 효율성 증대)
    • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.
  • 시스템 처리율 향상 (처리비용 감소)
    • 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.
    • 스레드 사이 작업량이 작아 Context Switching이 빠르다. (캐시 메모리를 비울 필요가 없다.)
  • 간단한 통신 방법으로 프로그램 응답시간 단축
    • 스레드는 프로세스 내 스택영역을 제외한 메모리 영역을 공유하기에 통신 비용이 적다.
    • 힙 영역을 공유하므로 데이터를 주고 받을 수 있다.

문제점

  • 자원을 공유(code, data, stack)하기에 동기화 문제가 발생할 수 있다. (병목현상, 데드락 등)
  • 주의 깊은 설계가 필요하고 디버깅이 어렵다. (불필요 부분까지 동기화하면, 대기시간으로 인해 성능저하 발생)
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
  • 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.

 

Ref
https://wooody92.github.io/os/%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C/