단일 프로세스 vs 멀티 프로그래밍 vs 멀티 태스킹
단일 프로세스
CPU에 한번에 하나의 프로그램만 실행되는 것을 말한다.
단일 프로세스의 큰 단점은 프로세스→ IO → 프로세스→ IO 이런 순으로 반복이 될때 IO 처리시간시 CPU가 유휴 상태가 되고마는 큰 단점이 있다.
멀티 프로그래밍
위에서 언급한 단일 프로세스를 극복하기 위한 처리 방법으로 나온 것이 멀티 프로그래밍 기법이다. 프로세스가 2개 존재한다고 가정했을때, 각 프로세스들은 CPU 시간을 일정한 시간 단위로 번갈아가며 할당받는다. 이렇게 함으로써, 프로세스들은 동시에 실행되는 것처럼 느껴지지만 실제로는 CPU 시간을 번갈아가며 사용하게 된다.
그러면 예를 들어서 프로세스-1이 시간이 길다면 어떻게 될까? 프로세스-2가 굉장히 많은 시간을 뒤에서 기다려야하는 큰 단점이 발생한다.
멀티 태스킹
멀티 프로그래밍의 단점을 보완하고자 나온 것이 멀티 태스킹이다.
프로세스가 실행될때 아주 짧은 시간(quantum 시간 단위)로만 실행되게 잘게잘게 쪼개 놓은 것을 말한다. 멀티 태스킹 환경에서 여러 프로세스들이 동시에 실행되는 것처럼 보이지만, CPU가 매우 빠른 속도로 여러 프로세스 간을 전환하여 실행하는 데 있다. quantum 시간은 운영 체제의 스케줄러가 결정하며, 일반적으로 몇 밀리초에서 수십 밀리초의 범위에 있다.
프로세스들의 응답시간을 최소화하는데 목적을 둔다.
스레드 (Thread)
스레드 (Thread) 의 탄생 배경
멀티 태스킹에는 아직도 아래와같은 아쉬움과 문제점이 존재하였다.
- CPU 전환 오버헤드 (컨텍스트 스위치)는 비용이 큰 작업이다.
- 응답시간의 증가 극복
- 프로세스들끼리의 메모리 공유
- 한 프로세스에서 여러 태스크들의 작업
스레드의 특징
하나의 프로세스에서 하나 이상의 스레드를 가질 수 있으며 CPU에서 실행되는 단위로 unit of execution 이라고도 불린다.
간단하게는 아래와 같은 특징이 있다.
경량성(Lightweight)
스레드는 프로세스 내에서 생성되고 실행되므로 프로세스보다 더 가볍다. 이는 스레드간의 전환 및 생성이 프로세스 생성보다 효율적이라는 것을 의미한다.
공유 자원 (Share Resource)
스레드는 같은 프로세스 내에서 실행되므로, 프로세스의 자원과 메모리를 공유한다. 이는 데이터 및 자원의 공유가 더 효율적이며, 통신 및 동기화 작업이 더 단순해진다.
동시성(Concurrency)
여러 쓰레드가 동시에 실행될 수 있습니다. 이는 쓰레드 간에 실행 순서와 시간이 겹칠 수 있음을 의미한다. 여러 스레드가 동시에 실행되는 것처럼 보이지만, 실제로는 CPU 시간을 번갈아 가며 사용하게 된다.
병렬성(Parallelism)
멀티 코어 프로세서에서 여러 코어가 각각 독립적인 스레드를 실행할 수 있으므로, 병렬성을 활용하여 성능 향상을 이끌어낼 수 있다.
동기화(Synchronization)
여러 쓰레드가 동시에 공유 자원에 접근할 때, 동기화 메커니즘을 사용하여 상호 작용과 조율을 할 수 있다.
멀티 프로세싱 (multiprocessing)
멀티 프로세싱(Multiprocessing)은 두개의 프로세스 이상에 여러개의 CPU를 동시에 작업을 처리하는 컴퓨팅 시스템의 개념을 말한다. 각각의 프로세서는 독립적인 작업을 수행하며, 병렬성을 활용하여 작업을 더 빠르게 처리할 수 있다.
멀티 스레드 (multithread) vs 멀티 프로세싱 (multiprocessing)
예) 멀티 태스킹
아래와 같이 하나의 CPU core에 Thread 2개이상 번갈아가며 실행하고 있는 상태를 말한다.
예) 멀티 스레드
아래와 같이 CPU core 2개 이상에 Thread 2개이상이 각각 점유하고 있는 상태를 말한다.
예) 멀티 프로세싱
아래와 같이 CPU core 2개 이상에 프로세스 2개이상이 각각 점유하고 있는 상태를 말한다.
아래와 같은 에제를 보면 Core에 1개에 스레드 2개 이상이 할당되어 점유하고 있기 때문에 멀티 태스킹은 맞으며
Core 각각에 Thread 2개 이상이 각각 점유하고 있는 상태므로 멀티 스레드도 맞으며 각각의 프로세스가 Core를 할당하고 있으므로 멀티 프로세싱도 맞다.
- 멀티 태스킹 (O)
- 멀티 스레드 (O)
- 멀티 프로세싱 (O)
'백엔드 > 프로그래밍 기법' 카테고리의 다른 글
Python GIL (Global Interpreter Lock)에 대해 알아보자 (0) | 2023.07.11 |
---|---|
스레드 풀 (Thread Pool) (0) | 2023.07.11 |
스핀락(Spinlock) vs 뮤텍스(Mutex) vs 세마포어(Semaphore) (0) | 2023.07.07 |
Django vs Flask vs FastAPI 어떤 걸 사용해야 할까? (0) | 2022.04.11 |
Rest API란? (0) | 2022.04.11 |