프로세스와 스레드의 차이

나의 답변

프로세스는 다른 프로세스와 자원을 공유하지 않고, 스레드는 다른 스레드와 자원을 공유한다. 그래서 멀티 프로세스의 경우, 자원을 공유하지 않기 때문에 비용이 많이 드는 대신 데이터를 독립적으로 안전하게 처리가 가능하다. 반면에 멀티 스레드의 경우, 자원을 공유하기 때문에 비용은 적게 소비하지만 원하는 결과값을 도출하지 못하는 경우가 생길 수 있다.

개념

  • 멀티 프로세스
    • 장점
      • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.
    • 단점
      • Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다.
      • 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching가 발생하면 캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬 정보를 불러와야 한다.
      • 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.
  • 멀티 스레드
    • 장점
      • 시스템 자원 소모 감소(자원의 효율성 증대)
      • 시스템 처리량 증가(처리 비용 감소)
      • 간단한 통신 방법으로 인한 프로그램 응답 시간 단축
    • 단점
      • 주의 깊은 설계가 필요
      • 디버깅이 까다롭다.
      • 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
      • 다른 프로세스에서 스레드를 제어할 수 없다.(즉, 프로세스 밖에서 스레드 각각을 제어할 수 없다.)
      • 멀티 스레드의 경우 자원 공유의 문제가 발생한다.(동기화)
      • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.

출처 : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html