Multithreading vs. Multiprocessing vs. Multitasking

Multithreading, Multiprocessing, Multitasking은 컴퓨터 시스템에서 동시성과 병렬성을 구현하는 세 가지 주요 개념이다.

Multitasking은 단일 CPU에서 여러 작업(프로세스)을 동시에 실행하는 것처럼 보이게 하는 기술이다. 실제로는 CPU가 매우 빠르게 여러 작업 간을 전환하면서 실행한다.

  • 목적: CPU 사용률을 최대화하고 사용자에게 여러 프로그램이 동시에 실행되는 것 같은 환상을 제공한다.
  • 구현: 시분할(time-sharing) 방식을 사용하여 각 작업에 CPU 시간을 할당한다.

Multithreading은 하나의 프로세스 내에서 여러 실행 흐름(스레드)을 동시에 처리하는 기술이다.

  • 목적: 단일 프로세스의 성능을 향상시키고 자원을 효율적으로 사용한다.
  • 특징: 스레드들은 같은 프로세스 내의 메모리와 자원을 공유한다.

Multiprocessing은 여러 개의 프로세서(또는 코어)를 사용하여 여러 작업을 실제로 동시에 처리하는 기술이다.

  • 목적: 시스템의 전체적인 처리 능력을 향상시킨다.
  • 특징: 각 프로세서가 독립적으로 작업을 처리하며, 실제 병렬 처리가 가능하다.

이들의 차이점을 표로 정리하면 다음과 같습니다:

특성MultitaskingMultiprocessingMultithreading
정의단일 CPU에서 여러 작업을 번갈아 실행여러 프로세서에서 여러 작업을 동시에 실행단일 프로세스 내에서 여러 실행 흐름을 처리
실행 단위태스크/프로세스프로세스스레드
자원 공유각 작업이 독립적인 메모리 공간 사용각 프로세스가 독립적인 메모리 공간 사용스레드 간 메모리와 자원 공유
자원 사용중간높음낮음
통신 비용높음높음낮음
컨텍스트 스위칭 비용높음높음낮음
구현 복잡도낮음높음중간
안정성높음높음중간
CPU 활용단일 CPU여러 CPU/코어단일 CPU 또는 여러 CPU
장점- 자원 격리
- 안정성
- 구현 용이
- 진정한 병렬 처리
- 높은 성능
- 안정성
- 자원 공유
- 빠른 컨텍스트 스위칭
- 효율적인 통신
단점- 높은 리소스 사용
- 느린 통신
- 높은 리소스 사용
- 복잡한 구현
- 비용 높음
- 동기화 필요
- 디버깅 어려움
- 공유 자원 관리 필요
적합한 사용 사례- 독립적인 작업 실행
- 일반적인 데스크톱 환경
- 대규모 데이터 처리
- 고성능 컴퓨팅
- GUI 애플리케이션
- 웹 서버
- 게임 엔진

이러한 기술들은 서로 배타적이지 않으며, 현대의 시스템에서는 이들을 조합하여 사용하는 것이 일반적이다.
예를 들어, 멀티코어 시스템에서 여러 프로세스(멀티프로세싱)가 실행되고, 각 프로세스 내에서는 여러 스레드(멀티스레딩)가 실행되며, 이 모든 것이 멀티태스킹 환경에서 동작하는 것이다.

Multitasking은 사용자 인터페이스의 반응성을 높이는 데 유용하고, Multithreading은 단일 애플리케이션의 성능을 최적화하는 데 효과적이며, Multiprocessing은 대규모 병렬 처리가 필요한 작업에 적합하다.


참고 및 출처