티스토리 뷰

 

여러 작업을 동시에 수행하는 개념은 다양한 방식으로 구현될 수 있습니다. 대표적인 방식으로는 멀티태스킹(Multitasking), 멀티프로세스(Multiprocessing), 멀티프로세싱(Multiprocessing), 멀티스레딩(Multithreading)이 있습니다. 이 글에서는 각각의 개념을 명확히 구분하고 차이점을 살펴보겠습니다.


1. 멀티태스킹(Multitasking)

멀티태스킹은 하나의 CPU에서 여러 작업을 동시에 수행하는 것처럼 보이도록 만드는 기술입니다. 현대 운영체제에서는 프로세스 스케줄러가 매우 빠르게 여러 프로세스를 전환(Switching)하여 실행하는 방식으로 멀티태스킹을 구현합니다.

특징

  • 하나의 CPU에서 여러 작업을 처리하는 것처럼 보임 (시간 분할 방식)
  • 실제로는 여러 작업을 매우 빠르게 전환(Switching)하면서 실행됨
  • 대표적인 예: Windows, macOS 등의 운영체제에서 여러 프로그램을 동시에 실행하는 것

CPU와의 관계

  • 단일 코어 CPU에서도 멀티태스킹이 가능하지만, 실제로는 매우 빠른 작업 전환을 통해 동작함
  • 다중 코어 CPU에서는 멀티태스킹이 더욱 효율적으로 수행됨

예제

사용자가 웹 브라우저로 검색하면서 음악을 들을 때, 여러 프로그램이 동시에 실행되는 것처럼 보이는 것이 멀티태스킹의 예입니다.


2. 멀티프로세싱(Multiprocessing)

멀티프로세싱은 멀티코어 시스템에서 여러 개의 프로세스를 병렬로 실행하는 방식입니다. 멀티프로세스와 개념이 유사하지만, 멀티코어 환경에서 프로세스를 병렬로 실행하는 것이 핵심입니다.

특징

  • 여러 개의 CPU(Core)를 활용하여 병렬 처리 가능
  • CPU 리소스를 극대화할 수 있음
  • 프로세스 간 자원 공유가 어려울 수 있음
  • 파이썬의 multiprocessing 라이브러리 등을 활용할 수 있음

CPU와의 관계

  • 단일 코어 CPU에서는 의미가 없음
  • 멀티코어 CPU에서만 병렬 처리가 가능하며, 코어 수에 따라 성능이 결정됨

예제

데이터 분석 프로그램에서 여러 개의 CPU 코어를 활용하여 데이터를 병렬로 처리하는 것이 멀티프로세싱의 예입니다.


3. 멀티스레딩(Multithreading)

멀티스레딩은 하나의 프로세스 내부에서 여러 개의 스레드를 실행하는 방식입니다. 스레드는 프로세스 내에서 실행되는 경량 작업 단위로, 프로세스의 메모리 공간을 공유합니다.

특징

  • 하나의 프로세스 내에서 여러 개의 스레드를 실행
  • 스레드는 메모리를 공유하여 빠른 데이터 교환이 가능함
  • 스레드 간 동기화 문제(경쟁 조건, 데드락 등)가 발생할 수 있음
  • CPU 바운드 작업보다는 I/O 바운드 작업에 적합함

CPU와의 관계

  • 단일 코어 CPU에서도 멀티스레딩이 가능하지만, 스레드 전환을 통해 동작함
  • 멀티코어 CPU에서는 스레드가 병렬로 실행될 수 있음
  • 하이퍼스레딩 기술이 적용된 CPU에서는 하나의 코어에서 여러 스레드를 실행할 수 있음

예제

게임에서 여러 개의 스레드를 활용하여 하나의 스레드는 사용자 입력을 처리하고, 다른 스레드는 그래픽을 렌더링하는 것이 멀티스레딩의 예입니다.


[ 개념 비교 ]

개념 실행  단위메모리 공유 주요 특징 CPU 활용
멀티태스킹 프로세스 X 빠른 전환(Switching)으로 동시에 실행하는 것처럼 보임 단일/다중 코어 모두 가능
멀티프로세스 프로세스 X 독립적인 프로세스로 실행, 프로세스 간 통신 필요 멀티코어에서 병렬 실행 가능
멀티프로세싱 프로세스 X 멀티코어 활용, 병렬 처리 가능 멀티코어 필수
멀티스레딩 스레드 O 하나의 프로세스 내에서 다중 작업 수행 단일 코어에서도 실행 가능하지만, 멀티코어에서 성능 향상

언제 어떤 방식을 사용할까?

  • 멀티태스킹: 여러 작업을 동시에 실행하는 운영체제 수준의 동작을 원할 때.
  • 멀티프로세싱: 멀티코어 CPU를 활용하여 병렬 처리를 최적화할 때.
  • 멀티스레딩: 하나의 프로그램 내에서 여러 작업을 동시에 처리하고, 메모리를 공유해야 할 때.

 

'CS' 카테고리의 다른 글

자료구조 Tree(트리) 란?  (1) 2025.04.18
Heap(힙) 이란?  (0) 2025.04.18
컨텍스트 스위칭(Context Switching)이란?  (0) 2025.04.03
API Gateway란?  (0) 2025.03.12
Mock(Mocking)란 무엇인가?  (1) 2025.03.12
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함