💡 "프로세스와 스레드는 무엇이며, 어떻게 다를까?"
👉 간단히 말하면:
📌 "운영체제(OS)에서 실행 중인 프로그램"
✔ 독립적인 실행 단위 → 하나의 프로세스가 종료되어도 다른 프로세스에 영향을 주지 않음.
✔ 자원(메모리, CPU) 할당 단위 → 프로세스마다 별도의 메모리 공간 할당.
✔ 운영체제에서 관리 → 프로세스 간의 통신(IPC, Inter-Process Communication)이 필요함.
예시:
- 크롬 브라우저를 2개 실행하면 각각 독립된 프로세스로 동작.
- 메모장, 카카오톡, IntelliJ를 실행하면 각각 다른 프로세스.
📌 "프로세스 내에서 실행되는 작은 작업 흐름 (실행 단위)"
✔ 경량 프로세스 (Lightweight Process) → 프로세스보다 적은 자원으로 실행 가능.
✔ 빠른 실행 → 프로세스 간 통신(IPC)보다 스레드 간 통신이 빠름.
✔ 자원 공유 → 같은 프로세스 내에서 메모리 공간을 공유하여 효율적.
✔ 병렬 처리 (멀티스레딩) → CPU를 더 효율적으로 사용 가능.
예시:
- 크롬 브라우저에서 여러 개의 탭을 동시에 실행하는 경우 (각 탭이 스레드).
- 게임에서 렌더링, 네트워크, 사운드 처리 등이 개별 스레드로 실행됨.
- 채팅 앱에서 메시지를 수신하는 스레드 & UI를 갱신하는 스레드가 따로 존재.
| 비교 항목 | 프로세스(Process) | 스레드(Thread) |
|---|---|---|
| 정의 | 실행 중인 프로그램 | 프로세스 내부의 작은 실행 단위 |
| 실행 단위 | 독립적인 실행 단위 | 프로세스 내에서 실행되는 흐름 |
| 메모리 공유 | ❌ 공유하지 않음 (독립적) | ✅ 공유 (Code, Data, Heap 공유) |
| 실행 속도 | 느림 (프로세스 간 통신 필요) | 빠름 (같은 메모리 공간 사용) |
| 생성 비용 | 큼 (새로운 메모리 할당 필요) | 작음 (기존 프로세스 내에서 실행) |
| 예제 | 크롬 브라우저, IntelliJ, 카카오톡 | 크롬 탭, 채팅 메시지 수신 스레드 |
각 프로세스는 독립적인 메모리 공간을 가짐.
[프로세스 1]
├── Code (코드)
├── Data (전역 변수, static 변수)
├── Heap (동적 메모리 할당)
├── Stack (지역 변수, 함수 호출 스택)
➡ 프로세스끼리는 각각 독립된 메모리를 사용하여 서로 영향을 주지 않음.
하나의 프로세스 내에서 여러 스레드가 실행됨.
[프로세스 1]
├── Code (공유)
├── Data (공유)
├── Heap (공유)
├── [스레드 1] → Stack (개별)
├── [스레드 2] → Stack (개별)
├── [스레드 3] → Stack (개별)
➡ 같은 프로세스 내의 스레드들은 Stack을 제외한 나머지 공간(Code, Data, Heap)을 공유함.
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를 사용하면 다른 애플리케이션을 실행할 수 있음.
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 실행 중
...
➡ 여러 개의 스레드가 동시에 실행됨!
| 질문 | 답변 |
|---|---|
| 프로세스란? | 실행 중인 프로그램으로, 독립적인 메모리 공간을 가진다. |
| 스레드란? | 프로세스 내에서 실행되는 작은 실행 단위로, 메모리를 공유한다. |
| 프로세스와 스레드의 차이점? | 프로세스는 독립적이고, 스레드는 같은 메모리를 공유한다. |
| 스레드의 장점? | 실행 속도가 빠르고, 메모리를 효율적으로 사용할 수 있다. |
| 멀티스레딩이란? | 하나의 프로세스에서 여러 스레드가 동시에 실행되는 방식. |
✔ 프로세스: 운영체제에서 실행되는 하나의 프로그램 (메모리 독립적).
✔ 스레드: 프로세스 내부에서 실행되는 작은 실행 단위 (메모리 공유).
✔ 멀티스레딩: 하나의 프로세스에서 여러 개의 스레드가 동시에 실행됨.
✔ 프로세스 간 통신은 어렵지만, 스레드는 같은 메모리를 공유하여 빠르게 실행 가능.