기술 면접 준비

멀티 프로그래밍, 멀티 태스킹, 멀티 프로세싱, 멀티 스레딩

jinsang-2 2025. 1. 23. 22:58

단일 프로세스 (Single Process)

단일 프로세스

  • 초창기 컴퓨터는 단일 프로세스 시스템이었음
  • 한 번에 하나의 프로그램만 실행할 수 있었고 만약 다른 프로그램을 실행하고 싶다면 현재 프로그램을 종료 후 실행시켜야 했다.

단점

  • 한 번에 하나의 프로그램만 실행 가능
  • CPU 사용률도 좋지 않음
    • 프로그램 실행 도중 I/O 작업이 발생하면 CPU 프로세스는 I/O 작업을 기다리느라 아무것도 못하는 상태가 된다.

!https://blog.kakaocdn.net/dn/U7aZ1/btr5OcPeOkq/NZRSiL9tyKEZpvtvuuQ5bk/img.png

멀티 프로그래밍(Multi Programming)

멀티 프로그래밍이란?

  • 단일 프로세스(Single Process)의 문제를 해결하기 위해 여러 개의 프로그램을 메모리에 올려놓고 하나의 CPU에서 번갈아 가면서 동시에 실행시키는 방법을 고안
  • 즉! 단일 프로세서(CPU 코어가 한 개) 환경에서 여러 프로그램을 동시에 실행하는 것처럼 보이게 하는 기술이다.
  • 단일 프로세서에서 여러 프로그램을 번갈아가며 실행
    • 멀티 프로그래밍은 CPU 사용률 최적화에 초점이 맞춰져 있다.
    • 예를 들어 아래 그림에서 프로세스 #1 작업 시작 후 I/O 작업(오래 걸리는 작업)을 만나게 되면 프로세스는 #2 작업을 진행한다.

!https://blog.kakaocdn.net/dn/cYLtGL/btr5Q4Jdf5Z/C5rgpeZrkKhNNroOJkmFu1/img.png

단점

  • 어느 한 프로그램이 CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기를 해야 한다는 문제점 발생 = 멀티 프로그래밍은 컨텍스트 스위칭이 필수가 아님 !

멀티 태스킹(Multi Tasking)

멀티 태스킹이란?

  • 멀티 프로그래밍(Multi Programming)에서 어느 하나의 프로세스가 모두 실행되어야 다음 프로세스가 실행할 수 있는 방식을 개선하기 위해 CPU는 프로세스를 아주 짧은 시간(quantum)만 실행되도록 하는 시분할 시스템을 고안

    • 시분할 시스템 : 프로그램이 cpu를 점유하는 시간을 잘게 쪼개서 실행할 수 있도록 하는 시스템
  • 멀티 태스킹은 프로세스의 응답 시간을 최소화하여 즉각적인 반응을 이루는데 목적이 있다.

    • 동시에 실행하는 것처럼 보이게 한다.
  • 잘게 나뉘어진 프로세스끼리 문맥 교환(Context Switching)이 일어난다.

    !https://blog.kakaocdn.net/dn/boH2Gy/btr5OdtOvc8/DFiYGND38etVtHrjS3QZHK/img.png

멀티 태스킹의 장점

  • 여러 작업을 동시에 처리하는 것처럼 보이게 만들어서 사용자에게 더 빠른 반응성을 제공
    • 실제 동시에 프로그램이 실행되는 것처럼 느낌
  • 작업을 나누어 처리하기 때문에 프로세스 내에서 문제 발생 시에 해당 작업만 중지할 수 있게 되어 전체 시스템이 멈추는 것을 방지함
  • 멀티 프로세싱 또는 멀티 코어를 사용하는 시스템에서 여러 개의 프로세서(CPU)가 동시에 작업을 효율적으로 처리할 수 있다.
  • 프로세스 간의 우선순위 조절이 수월해진다.
    • 우선순위 높은 작업이 더 자주 실행 됨

초기에는 프로세스 기반의 멀티 태스킹이었다.. (그에 따른 아쉬운점)

  • 하나의 프로세스가 동시에 여러 작업을 수행하지 못함
  • 프로세스 간 컨텍스트 스위칭은 오버헤드가 큼(메모리와 CPU 레지스터의 전환 필요).
  • 프로세스는 독립적인 자원을 사용하기에 프로세스끼리 데이터 공유가 까다롭다.

스레드 기반의 멀티 태스킹으로 발전

  • 이후 멀티태스킹이 발전하면서 스레드(Thread)를 실행 단위로 포함한 방식 등장
  • 스레드 기반의 멀티태스킹 장점
    • 하나의 프로세스가 동시에 여러 작업을 수행 가능하다.
    • 스레드는 같은 프로세스 내에서 같은 메모리 공간을 공유하므로, 데이터 공유가 간편하다.
    • 스레드 간 컨텍스트 스위칭은 프로세스보다 오버헤드가 적다. (메모리 맵 전환 필요 없음)

기억해야 할 포인트

  • 현대 운영체제는 프로세스 기반 멀티태스킹과 스레드 기반 멀티태스킹을 함께 사용한다.
  • 멀티스레딩으로 프로세스 기반의 멀티 태스킹의 문제를 대부분 해결할 수 있지만 스레드 역시 동기화(데드락, 레이스 컨디션)와 같은 단점이 존재

멀티 스레딩(Multi threading)

!https://lycos7560.com/wp-content/uploads/2023/03/image-35.png

스레드(Thread)란?

  • 스레드는 프로세스 내에서 실행 흐름을 나타내는 작업의 단위로, 프로세스가 생성한 독립적인 작업 흐름이다.
  • CPU 수행의 기본 단위가 되고 스레드가 수행되는 환경을 Task라고 부른다.
  • Code, Data 영역 및 운영체제 자원을 공유하면서도, 스레드마다 별도의 Program Counter, 레지스터, Stack을 가진다.
  • 한 프로세스의 여러 스레드가 동일한 메모리 공간에서 실행된다.

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https://blog.kakaocdn.net/dn/boYVOh/btre0cyrDsZ/SHqJC91eqqxkr4CqyUs9VK/img.png

멀티 스레딩이란?

  • 한 프로세스가 하나의 스레드를 이용하여 한 번에 한 작업만 수행하는 것은 싱글 스레드, 한 프로세스가 여러 스레드를 동시에 여러 작업을 수행하는 것은 멀티 스레드라 한다.
  • 프로세스 내의 스레드는 모두 각각 독립적인 실행 파일이며, 모든 스레드는 프로세스의 일부이다.

프로세스를 여러 개 수행해도 되지만 굳이 스레드를 사용하는 이유는?

  • 프로세스를 생성하거나 Context Switching 하는 작업은 무겁고 잦으면 성능 저하가 발생하는데, 스레드를 생성하거나 switching 하는 것은 그에 비해 가볍다
  • 두 프로세스가 하나의 데이터를 공유하려면 메시지 패싱이나 공유 메모리 또는 파이프를 사용해야 하는데, 이는 효율도 떨어지고 개발자가 구현, 관리하기도 번거롭다.

멀티스레딩의 특징

프로세서(CPU)가 여러 개인 경우 멀티 스레드를 통해 병렬성을 높여 여러 작업이 동시에 수행될 수 있으며, 프로세서가 하나인 경우에는 멀티 스레드를 통해 동시성을 높여 실제로는 각각의 시간에 한 작업만 수행되지만, 병렬적으로 수행되는 것처럼 보이게 할 수 있다. 만약 한 스레드가 blocked(waiting) 되더라도 커널이 다른 스레드로 switch 시켜 실행할 수 있다.

멀티스레딩의 장점

  1. 응답성(Responsiveness)
  • 싱글 스레드인 경우, 작업이 끝나기 전까지 사용자에게 응답하지 않는다. 반면 멀티스레드인 경우 작업을 분리해서 수행하므로 실시간으로 사용자에게 응답할 수 있다.
  1. 자원 공유(Resource sharing)
  • 프로세스는 오직 공유 메모리나 메시지 패싱을 이용해서 자원을 공유할 수 있지만, 스레드는 자신이 속한 프로세스 내의 스레드들과 메모리나 자원을 공유하여 효율적으로 사용할 수 있다.
  1. 경제성(Economy)
  • 프로세스를 새로 생성하는 비용보다 스레드를 새로 생성하는게 훨씬 이득이다. 컨텍스트 스위칭의 오버헤드 또한 스레드가 더 경제적이다.
  • 실제 Solaris에서 프로세스 생성은 스레드 생성보다 30배 느리고, switching은 5배 느리다.
  1. 확장성(Scalability)
  • 싱글 스레드인 경우 한 프로세스는 오직 한 프로세서에서만 수행 가능하다. 반면 멀티 스레드인 경우 한 프로세스를 여러 프로세서에서 수행할 수 있으므로 훨씬 효율적이다.

멀티 스레딩의 단점

  1. 복잡성:
    • 스레드 간 자원 공유를 제대로 관리하지 못하면 데드락이나 레이스 컨디션 같은 문제 발생.
  2. 디버깅 난이도:
    • 병렬 실행 중 문제를 추적하는 것이 어려움.
  3. 컨텍스트 스위칭 오버헤드:
    • 스레드 간 전환은 프로세스보다 가볍지만, 많아질 경우 성능 저하 가능.

User-level Thread vs Kernel-level Thread

  • 유저 스레드(User-level Thread)
    • 유저 공간(User Space)에서 실행되며, 커널의 관여 없이 스레드 라이브러리가 직접 관리
    • 커널은 이를 하나의 단일 스레드로 인식
    • 장점
      • 커널 모드 전환이 없기에 오버헤드가 낮아 성능이 좋고 구현이 간단하고 가볍다.
    • 단점
      • 한 스레드가 block 상태가 되면 전체 프로세스가 block 된다. (커널은 프로세스 내의 개별 스레드를 인식하지 못하기 때문)
  • 커널 스레드(Kernel-level Thread)
    • 커널이 직접 스레드 관리
    • 커널은 각각의 스레드를 독립적으로 스케줄링
    • 장점
      • 안정적이고 한 스레드가 block 되어도 다른 스레드가 실행 가능
      • 멀티 프로세서 환경에서 병렬 처리가 가능하다
    • 단점
      • 커널 모드 전환 오버헤드가 발생 (유저 모드 → 커널 모드 → 유저 모드)
      • 스레드 생성 및 관리 비용이 높다.

멀티 프로세싱(Multi Processing)

멀티 프로세싱이란?

멀티 프로세싱(Multi-processing)은 여러 개의 CPU 코어(또는 프로세서)를 사용하여 동시에 작업을 병렬로 처리하는 기술을 의미한다.

멀티 프로그래밍이나 멀티 태스킹이 하나의 CPU에서 여러 작업을 효율적으로 실행하는 데 초점이 맞춰져 있다면, 멀티 프로세싱은 물리적으로 CPU 코어의 수를 늘려 전체적인 성능을 향상시키는 데 중점을 둔다.

  • 병렬 처리가 이루어지며, 각 프로세서(CPU)가 독립적으로 작업을 실행
  • 각 CPU 코어가 서로 다른 프로세스를 처리하므로 실제로 동시에 작업이 실행

멀티 프로세싱 vs 멀티 프로세스 (헷갈림 주의!)

1. 멀티 프로세싱

  • 정의 : 하나의 시스템에서 여러 개의 프로세서(CPU 또는 코어)를 활용해 작업을 처리하는 것.
    • 즉, 프로세서(CPU)가 멀티
  • 목적 : 병렬 처리 성능을 향상시키고, 대규모 데이터를 빠르게 처리.
  • 특징
    • 여러 CPU 코어가 동시에 작업을 처리.
    • 전체 작업 처리 속도가 빨라짐.
    • 하드웨어적인 병렬 처리를 의미.
  • 예시
    • 싱글코어 / 싱글 프로세싱
      • 요리사가 한 명만 있는 경우, 모든 주문을 한 명이 순서대로 처리
    • 멀티 프로세싱
      • 여러 명의 요리사가 있는 것, 각 요리사가 각각의 주문을 나누어 동시에 작업

2. 멀티 프로세스

  • 정의 : 하나의 응용 프로그램을 여러 개의 프로세스(독립적인 실행 단위)로 분리해 실행하는 것.
    • 즉, 프로세스(Process)가 멀티
  • 목적 : 프로그램의 안정성병렬 작업 능력을 향상.
  • 특징
    • 하나의 프로그램이 여러 프로세스로 나뉘어 실행.
    • 한 프로세스가 비정상 종료되어도 다른 프로세스에 영향을 주지 않음.
    • 프로세스 간 데이터 공유가 어렵고, 오버헤드가 발생(예: 컨텍스트 스위칭).
  • 예시:
    • 웹 브라우저에서 각 탭을 독립적인 프로세스로 실행.
    • 크롬 브라우저에서 하나의 탭이 멈춰도 전체 브라우저가 종료되지 않음.