프로세스는 각각 독립된 주소 공간을 갖고 있으며, code
, data
, heap
, stack
영역으로 구성됩니다. 반면, 스레드는 이 중 stack
만 별도로 할당받고 나머지 영역은 다른 스레드와 공유하게 됩니다.
아래 예제에서는 멀티 프로세스를 활용하는 방식과 멀티 스레드를 활용하는 방식을 비교합니다.
public class MultiProcessExample {
public static void main(String[] args) {
try {
// 새로운 프로세스를 생성
ProcessBuilder pb = new ProcessBuilder("java", "-cp", ".", "WorkerProcess");
Process process = pb.start();
System.out.println("새로운 프로세스가 실행되었습니다.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
class WorkerProcess {
public static void main(String[] args) {
System.out.println("작업 프로세스 실행 중...");
}
}
public class MultiThreadExample {
public static void main(String[] args) {
Thread workerThread = new Thread(new WorkerThread());
workerThread.start();
System.out.println("새로운 스레드가 실행되었습니다.");
}
}
class WorkerThread implements Runnable {
@Override
public void run() {
System.out.println("작업 스레드 실행 중...");
}
}
멀티 스레드를 사용하면 프로세스 생성의 오버헤드를 줄이고, 스레드 간 통신 비용을 낮출 수 있어 시스템 성능을 효율적으로 관리할 수 있습니다. 다만, 공유 자원 관리와 동기화에 신경 써야 하며, 멀티 스레드의 특성을 잘 이해하고 사용해야 안정적인 프로그램을 개발할 수 있습니다.