멀티태스킹과 멀티프로세싱: 하나의 CPU로 여러 작업을 처리하는 방식

y001·2025년 5월 25일
post-thumbnail

현대의 컴퓨터는 여러 개의 프로그램을 동시에 실행할 수 있다. 그러나 이는 단순한 병렬 실행이 아닌, 운영체제가 제공하는 다양한 방식의 실행 전략에 기반한다. 본 글에서는 멀티태스킹과 멀티프로세싱의 개념을 정리하고, 프로세스와 스레드 구조, 컨텍스트 스위칭의 동작 방식과 비용에 대해 서술한다.

단일 CPU 환경에서의 프로그램 실행

음악 재생 프로그램과 문서 작성 프로그램을 동시에 실행하는 상황을 가정하자. 이때 CPU가 하나인 경우, 실제로는 두 프로그램을 동시에 실행하지 못한다. CPU는 한 번에 하나의 작업만 처리할 수 있기 때문이다. 운영체제는 이 제한된 자원을 관리하면서 두 작업을 빠르게 전환하여 실행한다.

멀티태스킹(Multitasking): 시분할 방식에 의한 동시성

운영체제는 약 10ms 단위로 작업을 번갈아 수행한다. 예를 들어, 10ms 동안 프로그램 A를 실행한 뒤, 다음 10ms 동안 프로그램 B를 실행하고, 다시 A로 돌아가는 식이다. 이 과정을 매우 빠르게 반복하기 때문에 사용자는 두 프로그램이 동시에 실행되는 것처럼 인식하게 된다. 이를 시분할(Time Sharing) 방식이라 하며, 하나의 CPU로 여러 작업을 실행하는 방식이다.

멀티프로세싱(Multiprocessing): 병렬 실행

CPU가 여러 개의 코어를 가지고 있다면, 각 코어가 서로 다른 작업을 병렬로 처리할 수 있다. 예를 들어, 프로그램 A는 코어 1에서, 프로그램 B는 코어 2에서 동시에 실행된다. 이 방식은 실제로 두 작업이 동시에 실행되므로 병렬 처리라고 한다.

구분설명
멀티태스킹하나의 CPU로 여러 작업을 번갈아 빠르게 실행하는 방식
시분할짧은 시간 간격으로 작업을 순환하며 실행하는 운영체제 전략
멀티프로세싱여러 CPU 코어가 실제로 병렬로 실행을 수행하는 방식

프로세스와 스레드: 운영체제가 관리하는 실행 단위

프로세스(Process)

운영체제는 프로그램을 프로세스라는 단위로 관리한다. 실행 중인 하나의 프로그램은 하나의 프로세스이며, 프로세스는 독립적인 메모리 공간을 가진다. 운영체제는 각 프로세스의 메모리를 엄격히 분리하여 다른 프로세스의 접근을 제한한다. 이는 보안성과 안정성을 보장하기 위함이다.

스레드(Thread)

스레드는 프로세스 내부에서 실제로 작업을 수행하는 최소 실행 단위이다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이들 스레드는 메모리 공간을 공유한다. 예를 들어, 힙 영역과 메서드 영역은 모든 스레드가 공유하고, 스택은 각 스레드마다 별도로 할당된다.

스레드 실행과 스케줄링

CPU는 한 번에 하나의 스레드만 실행할 수 있다. 여러 스레드가 있는 경우, 운영체제의 스케줄러가 어떤 스레드를 언제, 얼마나 실행할지 결정한다. 스케줄러는 다양한 알고리즘을 통해 작업을 분배하고, CPU 자원을 효율적으로 활용한다.

컨텍스트 스위칭(Context Switching): 문맥 전환 비용

멀티태스킹 환경에서는 스레드 간 전환이 자주 발생한다. 이때 CPU는 이전 스레드의 실행 상태(문맥)를 저장하고, 새 스레드의 문맥을 복원하는 작업을 수행한다. 이 과정을 컨텍스트 스위칭이라 하며, 일정한 시간과 시스템 자원을 소모한다.

컨텍스트 스위칭의 주요 과정

  • 현재 실행 중인 스레드의 레지스터, 명령 포인터, 지역 변수 등의 상태를 저장한다.
  • 다음 실행할 스레드의 상태를 복원하고, 해당 스레드를 실행 상태로 만든다.

컨텍스트 스위칭은 개별 비용은 작지만, 스레드 수가 많아질수록 누적되어 시스템 성능에 영향을 줄 수 있다.

스레드 수와 CPU 수의 관계

CPU 코어 수스레드 수설명
42컨텍스트 스위칭은 적지만 CPU 활용률이 낮다
4100CPU 활용률은 높지만 스위칭 비용이 과도하게 발생할 수 있다

작업 성격에 따른 스레드 전략: CPU-바운드 vs I/O-바운드

CPU-바운드 작업

  • 연산량이 많은 작업 (예: 알고리즘 계산, 영상 처리 등)
  • 스레드 수는 CPU 코어 수 + 1 정도가 이상적이다.
  • 스레드 전환을 줄이고 CPU 점유율을 최대화하는 것이 목표이다.

I/O-바운드 작업

  • 네트워크, 디스크, DB 조회 등 대기 시간이 긴 작업
  • 스레드를 많이 만들어도 CPU는 대부분 유휴 상태에 머문다.
  • 대기 중인 작업을 동시에 처리하는 것이 중요하므로, 스레드 수를 많이 늘리는 것이 효과적이다.

웹 애플리케이션 실무 예시

웹 서버는 대부분 I/O-바운드 작업이 주를 이룬다. 다음은 잘못된 구성 사례이다.

  • CPU 코어가 4개이므로 스레드도 4개만 구성
  • 동시에 10명 이상이 요청할 경우 나머지는 대기
  • CPU 사용률은 낮고, 응답 지연이 발생함

개선 방안

  • 충분한 수의 스레드를 만들어, 많은 요청을 동시에 처리할 수 있도록 구성
  • I/O 대기 시간 동안 다른 요청을 처리함으로써 자원을 효율적으로 사용

I/O 중심 환경에서는 CPU 코어 수보다 훨씬 많은 스레드를 구성해야 한다.


결론

멀티태스킹은 시분할을 통해 하나의 CPU로 여러 작업을 실행하는 전략이며, 멀티프로세싱은 실제 병렬 실행을 의미한다. 운영체제는 프로세스와 스레드 단위로 실행을 관리하며, 각 스레드는 스케줄링과 컨텍스트 스위칭을 통해 실행된다. 컨텍스트 스위칭은 시스템 성능에 영향을 줄 수 있으므로, 스레드 수와 CPU 수의 관계를 고려한 전략이 필요하다. 특히 I/O-바운드 작업에서는 스레드를 충분히 확보하여 병렬성을 높이는 것이 중요하다.

0개의 댓글