🔍 프로세스(Process)와 스레드(Thread)의 차이
프로세스(Process)와 스레드(Thread) 는 운영체제(OS)에서 작업을 실행하는 기본 단위입니다.
둘은 독립적인 실행 단위인지, 자원을 공유하는지 등의 차이가 있습니다.
✅ 1. 프로세스(Process)란?
📌 개념
- 실행 중인 프로그램(독립적인 실행 단위).
- CPU, 메모리, 파일 핸들 등 독립적인 자원(Resource) 보유.
- 다른 프로세스와 메모리를 공유하지 않음.
📝 특징
✔ 독립적인 실행 단위 → 하나의 프로세스는 다른 프로세스의 자원에 직접 접근할 수 없음.
✔ 멀티 프로세스(Multi-Process) 를 통해 여러 프로세스를 병렬 실행 가능.
✔ 다른 프로세스와 메모리를 공유하지 않기 때문에 안전하지만, 속도가 느림.
✅ 2. 스레드(Thread)란?
📌 개념
- 프로세스 내에서 실행되는 작은 실행 단위.
- 같은 프로세스 내에서 메모리(Heap, Static 등)와 자원을 공유.
- 멀티 스레드(Multi-Thread) 환경에서는 여러 개의 스레드가 병렬적으로 실행 가능.
📝 특징
✔ 한 프로세스 내에서 여러 스레드가 존재 → 같은 메모리 공간 공유.
✔ 멀티스레딩(Multi-Threading)으로 병렬 처리 가능 → 빠른 작업 처리 가능.
✔ 단점: 스레드 간의 동기화(Synchronization) 필요 → 충돌 가능성 있음.
✅ 3. 프로세스 vs 스레드 차이점
비교 항목 | 프로세스(Process) | 스레드(Thread) |
정의 | 실행 중인 프로그램 | 프로세스 내에서 실행되는 작업 단위 |
메모리 공유 여부 | 독립적인 메모리 공간 사용 | 같은 프로세스 내에서 메모리 공유 |
실행 속도 | 느림 (프로세스 간 통신 필요) | 빠름 (메모리 공유로 인해 IPC 필요 없음) |
통신 방식 | IPC(Inter-Process Communication) 필요 | 공유 메모리를 통한 데이터 교환 |
동기화 문제 | 독립적이므로 동기화 필요 없음 | 공유 자원 사용으로 동기화 필요 |
사용 예제 | 웹 브라우저, 데이터베이스 서버 | 웹 서버의 요청 처리, 게임 엔진의 물리 연산 |
✅ 4. 프로세스 & 스레드 예제
📝 (1) 프로세스 예제 (Java에서 새로운 프로세스 실행)
import java.io.IOException;
public class ProcessExample {
public static void main(String[] args) throws IOException {
Process process = new ProcessBuilder("notepad.exe").start(); // 새로운 프로세스 실행
System.out.println("새로운 프로세스 실행 완료");
}
}
✔ 메모장에서 새로운 프로세스(Notepad.exe)를 실행.
📝 (2) 멀티 스레드 예제 (Java)
class MyThread extends Thread {
public void run() {
System.out.println(Thread.currentThread().getName() + " 실행 중...");
}
}
public class ThreadExample {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start(); // 새로운 스레드 실행
t2.start(); // 또 다른 스레드 실행
}
}
✔ 같은 프로세스 내에서 여러 스레드가 실행됨
✔ 두 개의 스레드가 동시에 실행될 수 있음
✅ 5. 언제 프로세스를 사용하고, 언제 스레드를 사용할까?
사용 사례 | 프로세스(Process) 사용 | 스레드(Thread) 사용 |
독립적인 프로그램 실행 | ✔ (웹 브라우저, DB 서버) | ❌ |
자원 공유가 필요할 때 | ❌ | ✔ (같은 메모리 공간 사용) |
병렬 처리 | ✔ (멀티 프로세싱) | ✔ (멀티 스레딩) |
보안이 중요한 경우 | ✔ (독립적인 메모리) | ❌ (메모리 공유) |
CPU 연산이 많을 때 | ❌ (비효율적) | ✔ (스레드 활용) |
📌 결론:
- 독립적인 실행 단위가 필요하면 프로세스를 사용
- 같은 데이터 공간에서 빠른 처리가 필요하면 스레드를 사용 🚀
반응형