Nick Dev

[JAVA] Thread vs Process 본문

Java

[JAVA] Thread vs Process

Nick99 2024. 12. 11. 12:50
반응형

# 💡 Thread란?

### ✅ 정의

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

### ✅ 특징

![](https://velog.velcdn.com/images/nick9999/post/a6b5226c-aa8f-49ba-9019-12c15d35a82d/image.png)


- process의 **address space를 공유**한다

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

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

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

# 💡 Process란?

### ✅ 정의

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

### ✅ 특징

![](https://velog.velcdn.com/images/nick9999/post/caeda8d7-05b7-4a3a-b4a7-81ee3b992f32/image.png)

- 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 비용이 비교적 적다

반응형

'Java' 카테고리의 다른 글

[JAVA] CAS 알고리즘이란?!  (2) 2024.12.11
[JAVA] volatile ⁉  (0) 2024.12.11
[JAVA] 객체 지향의 4대 특성 - 캡!상추다  (0) 2024.12.11
[JAVA] HashMap의 내부 구현 방식  (0) 2024.12.11
[JAVA] ArrayList의 내부를 뜯어보자  (0) 2024.12.11