[OS] 멀티스레드 vs 멀티프로세스

HenryHong·2022년 8월 8일
0
  • 프로세스
    • 정의: 메모리에 올라와 실행되고 있는 프로그램의 인스턴스
    • 특징
      • 운영체제로부터 독립된 메모리 영역을 할당받는다. (다른 프로세스의 자원에 접근 X)
      • 프로세스들은 독립적이기 때문에 통신하기 위해 IPC를 사용해야 한다.
      • 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있다.
  • 쓰레드
    • 정의: 프로세스 내에서 할당받은 자원을 이용해 동작하는 실행 단위
    • 특징
      • 쓰레드는 프로세스 내에서 Stack만 따로 할당 받고, Code, Data, Heap 영역은 공유한다.(Stack을 분리한 이유는 Stack에는 함수의 호출 정보가 저장되는데, Stack을 공유하면 LIFO 구조에 의해 실행 순서가 복잡해지기 때문에 실행 흐름을 원활하게 만들기 위함이다.)
      • 쓰레드는 프로세스의 자원을 공유하기 때문에 다른 쓰레드에 의한 결과를 즉시 확인할 수 있다.
      • 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용하여 실행된다.

https://blog.kakaocdn.net/dn/bpie8u/btqKEyScItU/ISOD7DfzGuBuPdWEfGnZxk/img.jpg

[ 멀티 프로세스 VS 멀티 쓰레드 ]

  • 멀티 프로세스
    • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 1개의 작업을 처리하도록 하는 것
    • 특징
      • 1개의 프로세스가 죽어도 자식 프로세스 이외의 다른 프로세스들은 계속 실행된다
      • Context Switching을 위한 오버헤드(캐시 초기화, 인터럽트 등)가 발생한다.
      • 프로세스는 각각 독립적인 메모리를 할당받았기 때문에 통신하는 것이 어렵다.
  • 멀티 쓰레드
    • 하나의 프로그램을 여러 개의 쓰레드로 구성하여 각 쓰레드가 1개의 작업을 처리하도록 하는 것
    • 특징
      • 프로세스를 위해 자원을 할당하는 시스템콜이나 Context Switching의 오버헤드를 줄일 수 있다.
      • 쓰레드는 메모리를 공유하기 때문에, 통신이 쉽고 자원을 효율적으로 사용할 수 있다.
      • 하나의 쓰레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
      • 여러 쓰레드가 하나의 자원에 동시에 접근하는 경우 자원 공유(동기화)의 문제가 발생할 수 있다.
profile
주니어 백엔드 개발자

0개의 댓글