Thread 와 Process

hoon·2025년 1월 31일

JAVA

목록 보기
18/21

📌 스레드(Thread)와 프로세스(Process) 차이점 정리

💡 "프로세스와 스레드는 무엇이며, 어떻게 다를까?"
👉 간단히 말하면:

  • 프로세스(Process): 운영체제(OS)에서 실행 중인 하나의 프로그램
  • 스레드(Thread): 프로세스 내부에서 실행되는 작은 실행 단위 (작업 흐름)

1️⃣ 프로세스(Process)란?

📌 "운영체제(OS)에서 실행 중인 프로그램"

  • 프로그램이 실행되면 운영체제(OS)가 메모리를 할당하여 실행 상태가 된다.
  • 각각의 프로세스는 독립적인 메모리 공간(주소 공간, Code, Data, Stack, Heap)을 가짐.
  • 프로세스끼리는 기본적으로 메모리를 공유하지 않음 (따로 존재).

✅ 프로세스의 특징

독립적인 실행 단위 → 하나의 프로세스가 종료되어도 다른 프로세스에 영향을 주지 않음.
자원(메모리, CPU) 할당 단위 → 프로세스마다 별도의 메모리 공간 할당.
운영체제에서 관리 → 프로세스 간의 통신(IPC, Inter-Process Communication)이 필요함.

예시:

  • 크롬 브라우저를 2개 실행하면 각각 독립된 프로세스로 동작.
  • 메모장, 카카오톡, IntelliJ를 실행하면 각각 다른 프로세스.

2️⃣ 스레드(Thread)란?

📌 "프로세스 내에서 실행되는 작은 작업 흐름 (실행 단위)"

  • 하나의 프로세스는 여러 개의 스레드를 가질 수 있음 (멀티스레딩).
  • 같은 프로세스 내에 있는 스레드들은 메모리를 공유하며 실행됨.
  • 스택(Stack)만 따로 갖고, 나머지(Code, Data, Heap)는 공유함.

✅ 스레드의 특징

경량 프로세스 (Lightweight Process) → 프로세스보다 적은 자원으로 실행 가능.
빠른 실행 → 프로세스 간 통신(IPC)보다 스레드 간 통신이 빠름.
자원 공유 → 같은 프로세스 내에서 메모리 공간을 공유하여 효율적.
병렬 처리 (멀티스레딩) → CPU를 더 효율적으로 사용 가능.

예시:

  • 크롬 브라우저에서 여러 개의 탭을 동시에 실행하는 경우 (각 탭이 스레드).
  • 게임에서 렌더링, 네트워크, 사운드 처리 등이 개별 스레드로 실행됨.
  • 채팅 앱에서 메시지를 수신하는 스레드 & UI를 갱신하는 스레드가 따로 존재.

3️⃣ 프로세스 vs 스레드 차이점

비교 항목프로세스(Process)스레드(Thread)
정의실행 중인 프로그램프로세스 내부의 작은 실행 단위
실행 단위독립적인 실행 단위프로세스 내에서 실행되는 흐름
메모리 공유❌ 공유하지 않음 (독립적)✅ 공유 (Code, Data, Heap 공유)
실행 속도느림 (프로세스 간 통신 필요)빠름 (같은 메모리 공간 사용)
생성 비용큼 (새로운 메모리 할당 필요)작음 (기존 프로세스 내에서 실행)
예제크롬 브라우저, IntelliJ, 카카오톡크롬 탭, 채팅 메시지 수신 스레드

4️⃣ 프로세스와 스레드의 구조

📌 프로세스 메모리 구조

각 프로세스는 독립적인 메모리 공간을 가짐.

[프로세스 1]
  ├── Code (코드)
  ├── Data (전역 변수, static 변수)
  ├── Heap (동적 메모리 할당)
  ├── Stack (지역 변수, 함수 호출 스택)

➡ 프로세스끼리는 각각 독립된 메모리를 사용하여 서로 영향을 주지 않음.


📌 스레드 메모리 구조

하나의 프로세스 내에서 여러 스레드가 실행됨.

[프로세스 1]
  ├── Code (공유)
  ├── Data (공유)
  ├── Heap (공유)
  ├── [스레드 1] → Stack (개별)
  ├── [스레드 2] → Stack (개별)
  ├── [스레드 3] → Stack (개별)

➡ 같은 프로세스 내의 스레드들은 Stack을 제외한 나머지 공간(Code, Data, Heap)을 공유함.


5️⃣ 프로세스 & 스레드 사용 예제

✅ 1. 프로세스 예제 (Java에서 ProcessBuilder)

Java에서 새로운 프로세스를 실행할 때 ProcessBuilder를 사용한다.

import java.io.IOException;

public class ProcessExample {
    public static void main(String[] args) throws IOException {
        ProcessBuilder processBuilder = new ProcessBuilder("notepad.exe");
        Process process = processBuilder.start();  // 메모장 실행
        System.out.println("새로운 프로세스 시작!");
    }
}

✔ 위 코드를 실행하면 새로운 메모장 프로세스가 실행됨.
ProcessBuilder를 사용하면 다른 애플리케이션을 실행할 수 있음.


✅ 2. 스레드 예제 (Java에서 Thread 사용)

Java에서 새로운 스레드를 실행할 때 Thread 클래스를 사용한다.

class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " 실행 중");
        }
    }
}

public class ThreadExample {
    public static void main(String[] args) {
        MyThread thread1 = new MyThread();
        MyThread thread2 = new MyThread();

        thread1.start();  // 새로운 스레드 시작
        thread2.start();  // 또 다른 스레드 시작

        System.out.println("메인 스레드 종료");
    }
}

start()를 호출하면 새로운 스레드가 생성되어 병렬 실행됨.
✔ 실행 결과:

Thread-0 실행 중
Thread-1 실행 중
메인 스레드 종료
Thread-0 실행 중
Thread-1 실행 중
...

➡ 여러 개의 스레드가 동시에 실행됨!


6️⃣ 정리 (면접 대비)

질문답변
프로세스란?실행 중인 프로그램으로, 독립적인 메모리 공간을 가진다.
스레드란?프로세스 내에서 실행되는 작은 실행 단위로, 메모리를 공유한다.
프로세스와 스레드의 차이점?프로세스는 독립적이고, 스레드는 같은 메모리를 공유한다.
스레드의 장점?실행 속도가 빠르고, 메모리를 효율적으로 사용할 수 있다.
멀티스레딩이란?하나의 프로세스에서 여러 스레드가 동시에 실행되는 방식.

✅ 최종 정리

📌 프로세스 vs 스레드 한 줄 요약

프로세스: 운영체제에서 실행되는 하나의 프로그램 (메모리 독립적).
스레드: 프로세스 내부에서 실행되는 작은 실행 단위 (메모리 공유).
멀티스레딩: 하나의 프로세스에서 여러 개의 스레드가 동시에 실행됨.
프로세스 간 통신은 어렵지만, 스레드는 같은 메모리를 공유하여 빠르게 실행 가능.

0개의 댓글