[JAVA] Thread vs Process

nick·2024년 4월 18일
0

JAVA

목록 보기
11/13

💡 Thread란?

✅ 정의

  • process 내에서 실행되는 여러 흐름의 단위
  • CPU 수행의 기본 단위
    • 스케쥴링의 대상이라는 말 (그 중에서 kernel thread가 scheduling 대상)

✅ 특징

  • process의 address space를 공유한다

    • Code, Data, Heap 영역 공유
  • 각 thread는 개인 stack 영역을 보유

    • 다른 thread의 stack 영역 볼 수 있음
  • 각 thread는 개인 register set 보유

    • PC (Program Counter) : 다음에 실행할 instruction의 주소 값
    • SP (Stack Pointer) : 현재 stack영역의 최상단 가리킴

💡 Process란?

✅ 정의

  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
    • thread의 container라고 볼 수 있음

✅ 특징

  • process는 1개 이상의 thread를 갖는다

  • process는 각자 독립된 address space를 갖는다

    • Code, Data, Heap, Stack으로 구성되어 있음
  • OS가 각 프로세스에게 가상화한 address space(virtual address space)를 준다

    • 다른 프로세스의 주소 공간에 접근 못함

      • IPC(pipe, socket 등)을 활용하면 가능하긴 함

💡 Process와 Thread의 차이

1. 오류 발생 시, 영향력 차이

  • process는 오류가 발생해 강제 종료되어도, 기본적으로 다른 프로세스와 데이터를 공유하지 않기에 영향을 주지 않음

  • thread는 Code, Data, Heap 메모리 영역을 공유하기에 특정 thread에서 오류 발생하면 같은 프로세스 내의 다른 thread가 모두 종료될 수 있음

2. resource 차이

- process는 각각 독립된 address space를 갖는다

  • thread는 같은 process 안에서는 code/data/heap 영역 공유하지만, stack과 register set은 독립적으로 보유

3. 통신 차이

  • process는 shared memory, pipe, socket 등 IPC 활용해 통신 → 상대적으로 overhead가 크다

  • thread는 같은 address space를 공유해서 데이터 공유 및 통신이 더 쉽다 → 대신에 race condition과 같은 synchronize 문제 발생할 수 있음

4. context switching 비용 차이

  • process는 PCB를 교환하는데 비용 많이 발생하고 시간도 오래 걸림

  • thread는 stack을 제외한 다른 영역은 공유하기에 context switching 비용이 비교적 적다

profile
티스토리로 이전 : https://andantej99.tistory.com/

0개의 댓글