25.02.10 TIL 멀티프로세스와 멀티스레드

신성훈·2025년 2월 10일
0

TIL

목록 보기
129/162

1. 멀티프로세스와 멀티스레드란?

운영체제(OS)에서 하나의 프로그램은 프로세스(Process)로 실행됩니다.
프로세스 내부에는 실행 단위인 스레드(Thread)가 존재하며, 여러 개의 프로세스를 동시에 실행하는 방식을 멀티프로세스(Multi-Process) 하나의 프로세스 내에서 여러 개의 스레드를 실행하는 방식을 멀티스레드(Multi-Thread)라고 합니다.


2. 멀티프로세스 (Multi-Process)

멀티프로세스는 여러 개의 프로세스를 동시에 실행하는 방식입니다.

특징

  • 각 프로세스는 독립적인 메모리 공간을 가짐
  • 하나의 프로세스가 오류로 종료되어도 다른 프로세스에 영향을 주지 않음
  • 프로세스 간 통신(IPC, Inter-Process Communication)이 필요
  • 오버헤드가 큼

장점

  • 독립된 메모리 공간 → 하나의 프로세스가 오류 나도 다른 프로세스에 영향 없음
  • CPU의 여러 코어를 활용하여 병렬 실행 가능

단점

  • 컨텍스트 스위칭 비용이 큼 (프로세스 간 전환 시, 레지스터 및 메모리 관리 필요)
  • IPC(프로세스 간 통신) 구현이 복잡함 (Shared Memory, Message Queue 등)

예제 (Process 생성)

import java.io.IOException;

public class MultiProcessExample {
    public static void main(String[] args) throws IOException {
        ProcessBuilder processBuilder = new ProcessBuilder("notepad.exe"); // 새 프로세스 실행
        Process process = processBuilder.start();
        System.out.println("프로세스 실행: " + process);
    }
}

3. 멀티스레드 (Multi-Thread)

멀티스레드는 하나의 프로세스 내에서 여러 개의 스레드를 실행하는 방식입니다.

특징

  • 하나의 프로세스 내에서 메모리를 공유
  • 스레드 간 데이터 공유가 쉬움 (Heap 메모리를 공유)
  • 문맥 전환 비용이 적음
  • 실행 속도가 빠름

장점

  • 프로세스보다 메모리 사용량이 적음
  • 스레드 간 통신이 빠름 (같은 프로세스 내에서 메모리 공유)
  • CPU 코어를 활용하여 빠른 작업 수행

단점

  • 동기화 문제 (Race Condition) 발생 가능 → synchronized, Lock 등을 사용해야 함
  • 하나의 스레드가 오류 나면 전체 프로세스에 영향을 줌

예제 (멀티스레드 구현)

class MyThread extends Thread {
    public void run() {
        System.out.println(Thread.currentThread().getName() + " 실행 중");
    }
}

public class MultiThreadExample {
    public static void main(String[] args) {
        MyThread thread1 = new MyThread();
        MyThread thread2 = new MyThread();
        thread1.start();
        thread2.start();
    }
}

4. 멀티프로세스 vs 멀티스레드

비교 항목멀티프로세스 (Multi-Process)멀티스레드 (Multi-Thread)
메모리 구조각각 독립된 메모리 사용하나의 프로세스 내에서 메모리 공유
프로세스 간 통신IPC 사용 (오버헤드 큼)공유 메모리를 사용 (빠름)
오류 영향도한 프로세스가 죽어도 영향 없음하나의 스레드 오류 시 전체 영향
자원 사용더 많은 메모리 사용상대적으로 적은 메모리 사용
문맥 전환 비용높음 (프로세스 간 전환 비용)낮음 (스레드 전환 비용)
안정성독립적인 실행 환경 제공동기화 문제 발생 가능

5. 언제 멀티프로세스, 멀티스레드를 사용할까?

멀티프로세스가 유리한 경우

  • 독립적인 작업을 수행할 때 (예: 웹 서버의 여러 인스턴스 실행)
  • 하나의 작업이 다른 작업에 영향을 주면 안 될 때 (예: 크롬 브라우저의 탭 별 프로세스)
  • 보안이 중요한 경우 (프로세스 간 메모리 공유가 없어서 안전함)

멀티스레드가 유리한 경우

  • 동일한 데이터를 여러 스레드가 공유해야 할 때 (예: 웹 애플리케이션 요청 처리)
  • CPU 연산이 많고 빠른 처리가 필요할 때 (예: 게임 엔진, 실시간 스트리밍)
  • 프로세스 생성 및 관리 비용을 줄여야 할 때

6. 마무리

멀티프로세스와 멀티스레드는 각각의 장단점이 명확하기 때문에 상황에 따라 적절히 선택하는 것이 중요하다는 점을 배웠습니다.
멀티스레드는 빠른 처리와 메모리 절약이 가능하지만 동기화 문제를 고려해야 하며 멀티프로세스는 독립적인 실행이 가능하지만 메모리 사용량이 많고 통신 비용이 높다는 단점이 있었습니다.
실제 프로젝트에서 Spring Boot는 기본적으로 멀티스레드 기반으로 동작하며 Nginx와 같은 웹 서버는 멀티프로세스를 활용하는 방식도 알게 되었습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글