프로세스는 실행 중인 프로그램을 의미합니다.
운영체제가 프로그램을 실행하면 메모리(코드, 데이터, 스택 등)를 할당받아 독립적으로 실행됩니다.
스레드는 프로세스 내에서 실행되는 작업의 최소 단위입니다.
프로세스는 하나 이상의 스레드를 가질 수 있으며, 같은 메모리 공간을 공유합니다.
| 특징 | 프로세스 | 스레드 |
|---|---|---|
| 정의 | 실행 중인 프로그램 | 프로세스 내 작업 실행 단위 |
| 메모리 | 독립적 메모리 공간 | 메모리 공간 공유(Code, Data, Heap) |
| 자원 할당 | 운영체제에서 별도 자원 할당 | 프로세스의 자원을 공유 |
| 속도 | 생성/종료 속도가 느림 | 생성/종료 속도가 빠름 |
| 통신 방법 | IPC (파이프, 소켓, 공유 메모리 등) 사용 | 같은 메모리 공간으로 빠른 데이터 공유 |
멀티프로세스: 여러 개의 프로세스를 병렬로 실행
멀티스레드: 하나의 프로세스에서 여러 스레드를 병렬로 실행
class MyThread extends Thread {
public void run() {
System.out.println("Thread is running...");
}
}
public class ThreadExample {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable thread is running...");
}
}
public class RunnableExample {
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start();
}
}
프로세스와 스레드의 차이를 이해하면서, 자원 공유와 병렬 처리의 중요성을 알게 되었습니다. 특히 Java에서 멀티스레드를 구현해 보며 효율적 자원 활용의 장점을 느낄 수 있었습니다. 하지만 스레드 간 동기화 문제를 해결하지 않으면 데이터 충돌이 발생할 수 있다는 점에서 동시성 제어의 필요성도 깨달았습니다.