프로세스와 스레드의 차이점


공부한 내용을 복기하기 위해 짧게 정리해둔 요약본입니다 :)



프로세스와 스레드

프로세스: 메모리 위에 올라가 실행되고 있는 프로그램(의 인스턴스)

프로그램: 특정 작업을 수행하기 위해 작성된 코드

  • 프로세스의 경우 자원을 공유 하지 않고 독립적인 메모리 자원을 사용한다
    • 프로세스 간 자원 공유 하는 방법: IPC, LPC 등 사용
      • 단점: 프로세스 자원 공유는 CPU 레지스터 교체뿐 아니라 RAM과 CPU사이의 캐시 메모리까지 초기화 되기 때문에 자원 부담이 크다
  • 프로세스당 최소 1개의 스레드를 가지고 있다

스크린샷 2024-05-02 오후 3 27 24


스레드: 프로세스 내에서 실행되는 여러 흐름의 단위

  • 스레드의 경우 Code, Data, Heap 3가지의 메모리 영역을 공유하여 사용한다. Stack은 각 스레드별로 별도로 가지고 있다
  • 스레드의 문제점
    • 자원 동기화 문제(이전 스레드가 이미 공유 자원을 사용하고 있는 경우 동기화 문제가 발생할 수 있다)

스크린샷 2024-05-02 오후 3 27 46



CPU의 작업 처리 방식

  • 병렬성 (Parallelism): 여러개의 cpu 코어에 맞춰 여러개의 프로세스, 스레드를 돌려 병렬로 작업을 동시 수행하는 것을 말함
  • 동시성 (Concurrency): 하나의 cpu 코어가 번갈아가면서 여러 프로세스들을 조금씩 처리함으로써 마치 프로그램이 동시에 실행되는것처럼 작업을 수행하는 것을 말함

코어를 추가하는데에는 한계가 있기 때문에 동시성이 필요하다
작업을 효율적으로 처리하기 위해 동시성이 필요하다



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

  • 멀티 프로세스
    멀티 프로세싱이란, 여러개의 cpu가 여러 개의 프로세스로 구성하여 각 프로세스가 구성된 작업을 처리하도록 하는것
    • 2개 이상의 프로세스가 동시에 실행되는것
      • 동시 실행 의미: 병렬성과 동시성을 나타낸다

    스크린샷 2024-05-02 오후 3 55 40

    • 장점: 여러개의 자식 프로세스 중 하나가 죽어도 다른 프로세스에게 영향을 주지 않는다
    • 단점: 컨텍스트 스위칭의 오버헤드
      • 프로세스는 공유 하는 메모리가 없기 때문에 컨텍스트 스위칭이 발생하면 캐시에 있는 모든 데이터 리셋하고 다시 가져오는 작업들이 추가적으로 진행되어 시간이 많이 소모된다


  • 멀티 스레드
    멀티 스레딩이란 하나의 프로세스를 여러개의 스레드로 구성하고 각 스레드로 각 작업을 처리하도록 하는것
    • 하나의 프로세스 내에서 두개 이상의 스레드가 동시에 작업을 수행하는 것
    • 여러개의 프로세스: 병렬설을 높일 수 있다
    • 하나의 프로세스: 동시성을 높일 수 있다

    스크린샷 2024-05-02 오후 3 53 34

    • 장점
      • 시스템의 자원 소모 감소 (자원의 효율성 증가)
        • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 가능
      • 시스템 처리량 증가 (처리 비용이 감소)
        • 스레드 간 처리 작업량이 작아 컨텍스트 스위칭이 빠르다
    • 단점
      • 디버깅이 까다롭다
      • 멀티 스레드의 경우 자원 공유 문제가 발생할 수 있다
      • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다


위 두가지의 방법은 동시에 여러 작업을 수행한다는 공통점이 있다. 적용하려는 시스템의 장단점을 고려하여 선택해야 한다

  • 메모리 구분이 필요할땐 멀티 프로세스, 컨텍스트 스위칭이 자주 일어나고 데이터 공유가 빈번하며, 자원을 효율적으로 사용해야 하는 경우에는 멀티 스레드를 사용한다





참고


https://inpa.tistory.com/entry/thread-process-1
https://inpa.tistory.com/entry/thread-process-2
https://zhfvkq.tistory.com/12/thread-process-3
https://murphymoon.tistory.com/entry/thread-process-4 https://velog.io/@chy0428/thread-process-5