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

프로세스

  • 시스템 자원을 할당받아 실행되는, 프로그램의 인스턴스.
  • 하나 이상의 스레드가 할당된다.
  • 독립적인 메모리 공간(스택, 힙, 데이터, BSS, 코드 세그먼트)을 할당받는다.

스레드

  • 시스템 자원을 할당받아 실행되는, 프로세스 내부의 작업 묶음.
  • 프로세스가 할당받는 시스템 자원을 이용한다. 스택 세그먼트를 제외한 메모리 공간을 다른 스레드와 공유한다.

프로세스와 스레드의 메모리 구조

  • 프로세스는 독립적인 메모리 공간을 할당받는다.
  • 스레드는 스택 세그먼트를 제외한 메모리 공간을 다른 스레드와 공유한다.
  1. 스택 세그먼트
    • 함수 호출 시 생성되는 지역 변수, 매개 변수 등이 저장되는 세그먼트. 함수 호출과 함께 할당되고 함수가 반환될 때 해제된다.
    • 지역 변수, 매개 변수, 반환 값 등의 크기는 컴파일 시에 계산된다.
    • 실제 메모리 할당은 런타임 시에 이루어진다.
    • 높은 주소부터 할당된다.

  2. 힙 세그먼트
    • 동적 할당시 사용되며 런타임에 크기가 결정된다.
    • 낮은 주소부터 할당된다.

  3. 데이터 세그먼트: 초기화된 전역 변수, 정적 변수, 상수가 할당된다.
  4. BSS 세그먼트: 전역 변수, 정적 변수, 상수 중 초기화되지 않았거나 0으로 초기화된 변수가 할당된다.
  5. 코드 세그먼트: 소스 코드를 저장한다.

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

  • 프로세스와 스레드 모두 병렬 처리를 통해 시스템 자원의 사용률을 높이고 처리 속도를 높인다.
  • 프로세스는 데이터를 격리하여 안정성 면에서 유리한 반면, 스레드는 메모리 공간을 대부분 공유하기 때문에 컨텍스트 스위칭의 비용이 낮고, 작업 속도가 빠르다.