CS/운영체제

멀티 스레드 VS 멀티 프로세스

Geisha 2025. 2. 3. 23:54
현대 소프트웨어 개발에서는
효율적인 동시 실행(Concurrency)과 병렬 처리(Parallelism)가
필수적이다.

특히, 백엔드 개발에서는 서버가 동시에 많은 요청을 처리해야 하기 때문에,
CPU 활용을 극대화하고, 안정성을 유지하는 실행 방식을 선택하는 것이 중요하다.

멀티 프로세스와 멀티 스레드는 이러한 동시 실행을 구현하는 대표적인 두 가지 방식이다.
각각의 방식은 성능, 자원 관리, 안정성 측면에서 장단점을 가지고 있으며,
어떤 방식이 적절한지는 애플리케이션의 특성과 요구사항에 따라 달라진다.

그럼 이제,
멀티 프로세스와 멀티 스레드가 각각 어떻게 동작하는지
, 그리고
언제 어떤 방식을 선택하는 것이 좋은지
자세히 알아보자.

멀티 스레드(Multi-Thread) vs 멀티 프로세스(Multi-Process)

멀티 스레드와 멀티 프로세스는 모두 CPU 활용도를 높이고, 프로그램의 성능을 향상시키기 위해 사용되는 개념이지만, 작동 방식과 특성이 다르다.

 

                           멀티 스레드 (Multi-Thread)                  멀티 프로세스 (Multi-Process)

정의 하나의 프로세스 내에서 여러 개의 스레드가 실행 여러 개의 독립적인 프로세스가 실행
메모리 공유 여부 같은 메모리 공간(Heap, Data 영역) 공유 각 프로세스는 독립적인 메모리 공간을 가짐
CPU 활용 하나의 프로세스 내에서 여러 작업 수행 여러 프로세스가 개별적으로 실행되며 병렬 수행 가능

 


실행 구조

멀티 스레드

  • 하나의 프로세스 내에서 여러 개의 스레드가 실행됨.
  • 스레드끼리 메모리를 공유하면서, 독립적으로 실행됨.
  • 예시: 
    • 📌 멀티 스레드 예시: 카페에서 여러 손님에게 커피 만드는 바리스타
      • 바리스타(프로세스) 한 명이 여러 손님의 주문(스레드)을 동시에 처리한다고 가정해보자.
      • 바리스타는 같은 공간(공유 메모리)에서 커피 재료를 활용하며 여러 손님의 주문을 동시에 준비한다.
      • 한 손님의 커피를 내리는 동안 다른 손님의 우유를 데우거나, 얼음을 준비하는 식으로 작업을 병렬로 수행한다.
    • 특징:
      • 바리스타(프로세스)는 하나지만, 여러 주문(스레드)을 동시에 처리
      • 같은 공간(메모리)에서 재료(데이터)를 공유
      • 빠르지만, 만약 한 작업이 잘못되면(예: 우유를 엎지름), 다른 작업도 영향을 받을 수 있음 (스레드 간 충돌 문제 발생 가능)

멀티 프로세스

  • 여러 개의 독립적인 프로세스가 실행됨.
  • 각 프로세스는 자신만의 메모리 공간을 가지고 독립적으로 동작.
  • 예시: 
    • 📌 멀티 프로세스 예시: 여러 요리사가 각각 다른 요리를 만드는 레스토랑
      • 이번에는 바리스타가 아니라 여러 요리사(프로세스)가 있는 레스토랑을 생각해보자.
      • 요리사들은 각각 독립된 주방(프로세스 메모리 공간)을 사용하여 요리를 만든다.
      • 예를 들어, 한 요리사는 파스타를 만들고, 다른 요리사는 스테이크를 굽는다.
      • 각 요리사는 독립적으로 일하므로, 한 요리사가 실수로 요리를 태워도 다른 요리사는 영향을 받지 않는다.

장단점 및 사용 사례

장단점 비교

구분 멀티스레드 멀티프로세스
장점 - 메모리 공유로 인해 자원 소비가 적음
- 프로세스 간 통신(IPC)보다 빠름
- 컨텍스트 스위칭 비용이 낮음
- 독립된 메모리 공간을 가지므로 하나가 죽어도 다른 프로세스에 영향 없음
- 멀티 코어 활용이 용이함 (진정한 병렬 처리 가능)
단점 - 동기화 문제 발생 (하나의 스레드가 오류를 내면 전체 프로세스가 영향을 받을 수 있음)
- 스레드 간 공유 메모리 관리가 복잡함 (데드락, 경쟁 조건 발생 가능)
- 메모리 사용량 증가 (각 프로세스가 별도의 메모리 공간을 가짐)
- 프로세스 간 통신(IPC)이 느리고 복잡함

주요 사용 사례 비교

구분 멀티 스레드 멀티 프로세스
대표적인 사용처 - 웹 서버 (Nginx, Tomcat)
- 게임 엔진 (Unity, Unreal Engine)
- GUI 애플리케이션 (웹 브라우저, IDE)
- 웹 브라우저 (Chrome, Firefox)
- 데이터베이스 서버 (MySQL, PostgreSQL)
- 마이크로서비스 아키텍처 (각 서비스가 독립적인 프로세스로 동작)

언제 멀티 스레드를 선택하고, 언제 멀티 프로세스를 선택할까?

멀티 스레드를 사용할 때

  • 메모리 공유가 필요하고, 가벼운 병렬 처리가 요구될 때
  • 성능이 중요한 애플리케이션 (예: 게임, 실시간 애플리케이션)
  • 프로세스 간 통신이 자주 필요할 때 (스레드 간 데이터 공유가 빠름)

멀티 프로세스를 사용할 때

  • 안정성이 중요한 경우 (하나의 프로세스가 죽어도 다른 프로세스에 영향 없음)
  • 완전한 독립 실행이 필요한 경우 (예: 웹 브라우저 탭, 마이크로서비스)
  • 멀티 코어를 적극 활용하여 CPU 성능을 극대화할 때

결론

  • 멀티 스레드하나의 프로세스 내에서 여러 작업을 동시에 수행하는 방식으로, 메모리를 효율적으로 활용하고 속도가 빠르지만, 동기화 문제가 발생할 수 있음.
  • 멀티 프로세스여러 개의 독립된 프로세스를 실행하는 방식으로, 안정성이 높지만 메모리 사용량이 많고 프로세스 간 통신이 느릴 수 있음.

따라서 가벼운 병렬 처리가 필요하면 멀티 스레드,
안정성과 독립성이 중요하면 멀티 프로세스를 선택하는 것이 일반적이다.