멀티 태스킹 시스템의 한계
✔️ 멀티 태스킹(Multi-Tasking) 시스템의 문제
하나의 프로세스가 동시에 여러 작업을 수행하지 못함
여러 프로세스를 생성하여 문제를 해결할 수는 있으나, 프로세스가 많아지면 관리와 자원 소모 측면에서 여러 가지 단점이 발생합니다.
무거운 프로세스 간 컨텍스트 스위칭
컨텍스트 스위칭은 CPU가 한 프로세스에서 다른 프로세스로 전환할 때 발생하며, 이 작업은 상대적으로 무겁고 비용이 큽니다.
프로세스 간 데이터 공유의 어려움
각 프로세스는 독립적인 메모리 공간을 사용하기 때문에, 서로 다른 프로세스 간에 데이터를 공유하는 것이 까다롭습니다.
✔️ 스레드(Thread)의 등장과 특징
멀티 태스킹 시스템의 한계를 해결하기 위해 등장한 것이 스레드입니다. 스레드는 한 프로세스 내에서 여러 작업을 동시에 실행할 수 있도록 도와줍니다.
프로세스 내 여러 스레드 보유
하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 각 스레드가 하나의 작업을 담당합니다. 이는 여러 작업을 동시에 실행할 수 있도록 하는 핵심 요소입니다.
CPU 실행 단위
과거에는 프로세스가 CPU에서 실행되는 단위였다면, 현재는 스레드가 CPU에서 실행되는 최소 단위가 되었습니다. 기본적으로 프로세스는 하나의 스레드를 가지고 있으며, 필요에 따라 추가적인 스레드를 생성할 수 있습니다.
가벼운 스레드 간 컨텍스트 스위칭
스레드는 동일 프로세스 내에서 메모리 영역(특히 Heap)을 공유하므로, 스레드 간의 컨텍스트 스위칭은 프로세스 간 스위칭보다 훨씬 가볍습니다. 다만, 각 스레드는 고유한 Stack, 포인터, 프로그램 카운터 등을 가지고 있어, 자신만의 실행 상태를 유지합니다. 같은 프로세스 내의 스레드들은 메모리 영역은 공유하지만, 각 스레드만의 고유한 정보(스택, 프로그램 카운터 등)를 보유합니다.
✔️ 멀티 스레딩 (Multi-Threading)
멀티 스레딩
은 여러 프로세스가 동시에 실행되는 멀티 태스킹
과 달리, 하나의 프로세스 내에서 여러 작업을 여러 쓰레드를 통해 동시에 실행할 수 있도록 하는 방식입니다.
과거에는 프로세스 간 아주 짧은 시간의 스위칭으로만 작업을 나누었다면, 이제는 여러 프로세스와 스레드가 아주 짧게 쪼개진 CPU 타임을 나눠가져 실행됩니다.
멀티 스레딩
을 사용하면 프로세스 기반의 멀티 태스킹
보다 낮은 비용의 컨텍스트 스위칭과 효율적인 메모리 사용, 그리고 빠른 데이터 공유가 가능해집니다. 결과적으로, I/O 작업이나 대기 작업을 별도의 스레드로 처리하여 주 스레드가 차단되지 않고 사용자 입력이나 다른 중요한 작업에 빠르게 대응할 수 있게 됩니다.
물론, 멀티 스레딩
도 완벽한 해결책은 아닙니다. 스레드들이 같은 메모리를 공유하다 보니 경쟁 상태나 교착 상태와 같은 동기화 문제가 발생할 수 있고, 이를 해결하는 과정이 복잡해지거나 디버깅이 어려워질 수 있습니다. 또한, 스레드 관리를 소홀히 하면 시스템 자원이 과도하게 사용될 위험도 있습니다.
1. 경량화된 실행 단위
낮은 오버헤드
스레드는 같은 프로세스 내에서 실행되므로, 프로세스 간의 컨텍스트 스위칭에 비해 스레드 간 전환은 훨씬 가볍고 빠릅니다.
빠른 전환
각 스레드는 자신만의 스택과 레지스터(프로그램 카운터)를 갖지만, 코드나 힙 메모리 등은 공유하기 때문에 전환 시 재설정해야 할 데이터의 양이 적어 전환 속도가 빠릅니다.
2. 효율적인 데이터 공유
공유 메모리
같은 프로세스 내의 스레드들은 힙 영역 등 주요 메모리 공간을 공유하므로, 데이터 전달이 빠르고 간편합니다.
동기화 관리
스레드 간의 데이터 공유는 IPC와 같은 복잡한 메커니즘 없이도 이루어지지만, 동시에 접근할 경우 동기화 문제는 여전히 존재합니다.
3. 응답성 및 처리 성능 향상
병렬 처리
멀티쓰레딩을 통해 I/O 작업과 CPU 집약적 작업을 분리하여 동시에 처리할 수 있으므로, 시스템 전체의 응답성이 향상됩니다.
리소스 활용 최적화
CPU의 멀티코어 환경에서 각 스레드를 개별 코어에 할당하여 병렬 처리가 가능해지므로, 시스템 자원을 더욱 효율적으로 사용할 수 있습니다.
✔️ 멀티 프로세싱 (Multi-Processing)
두 개 이상의 프로세서나 코어를 활용하여, 여러 프로세스가 동시에 실행되는 시스템입니다.