본문으로 건너뛰기

멀티 태스킹 시스템의 한계

✔️ 멀티 태스킹(Multi-Tasking) 시스템의 문제

하나의 프로세스가 동시에 여러 작업을 수행하지 못함

여러 프로세스를 생성하여 문제를 해결할 수는 있으나, 프로세스가 많아지면 관리와 자원 소모 측면에서 여러 가지 단점이 발생합니다.

무거운 프로세스 간 컨텍스트 스위칭

컨텍스트 스위칭은 CPU가 한 프로세스에서 다른 프로세스로 전환할 때 발생하며, 이 작업은 상대적으로 무겁고 비용이 큽니다.

프로세스 간 데이터 공유의 어려움

각 프로세스는 독립적인 메모리 공간을 사용하기 때문에, 서로 다른 프로세스 간에 데이터를 공유하는 것이 까다롭습니다.

✔️ 스레드(Thread)의 등장과 특징

멀티 태스킹 시스템의 한계를 해결하기 위해 등장한 것이 스레드입니다. 스레드는 한 프로세스 내에서 여러 작업을 동시에 실행할 수 있도록 도와줍니다.

프로세스 내 여러 스레드 보유

하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 각 스레드가 하나의 작업을 담당합니다. 이는 여러 작업을 동시에 실행할 수 있도록 하는 핵심 요소입니다.

CPU 실행 단위

과거에는 프로세스가 CPU에서 실행되는 단위였다면, 현재는 스레드가 CPU에서 실행되는 최소 단위가 되었습니다. 기본적으로 프로세스는 하나의 스레드를 가지고 있으며, 필요에 따라 추가적인 스레드를 생성할 수 있습니다.

가벼운 스레드 간 컨텍스트 스위칭

스레드는 동일 프로세스 내에서 메모리 영역(특히 Heap)을 공유하므로, 스레드 간의 컨텍스트 스위칭은 프로세스 간 스위칭보다 훨씬 가볍습니다. 다만, 각 스레드는 고유한 Stack, 포인터, 프로그램 카운터 등을 가지고 있어, 자신만의 실행 상태를 유지합니다. 같은 프로세스 내의 스레드들은 메모리 영역은 공유하지만, 각 스레드만의 고유한 정보(스택, 프로그램 카운터 등)를 보유합니다.

✔️ 멀티 스레딩 (Multi-Threading)

멀티 스레딩은 여러 프로세스가 동시에 실행되는 멀티 태스킹과 달리, 하나의 프로세스 내에서 여러 작업을 여러 쓰레드를 통해 동시에 실행할 수 있도록 하는 방식입니다.

과거에는 프로세스 간 아주 짧은 시간의 스위칭으로만 작업을 나누었다면, 이제는 여러 프로세스와 스레드가 아주 짧게 쪼개진 CPU 타임을 나눠가져 실행됩니다.

멀티 스레딩을 사용하면 프로세스 기반의 멀티 태스킹보다 낮은 비용의 컨텍스트 스위칭과 효율적인 메모리 사용, 그리고 빠른 데이터 공유가 가능해집니다. 결과적으로, I/O 작업이나 대기 작업을 별도의 스레드로 처리하여 주 스레드가 차단되지 않고 사용자 입력이나 다른 중요한 작업에 빠르게 대응할 수 있게 됩니다.

물론, 멀티 스레딩도 완벽한 해결책은 아닙니다. 스레드들이 같은 메모리를 공유하다 보니 경쟁 상태나 교착 상태와 같은 동기화 문제가 발생할 수 있고, 이를 해결하는 과정이 복잡해지거나 디버깅이 어려워질 수 있습니다. 또한, 스레드 관리를 소홀히 하면 시스템 자원이 과도하게 사용될 위험도 있습니다.

1. 경량화된 실행 단위

낮은 오버헤드

스레드는 같은 프로세스 내에서 실행되므로, 프로세스 간의 컨텍스트 스위칭에 비해 스레드 간 전환은 훨씬 가볍고 빠릅니다.

빠른 전환

각 스레드는 자신만의 스택과 레지스터(프로그램 카운터)를 갖지만, 코드나 힙 메모리 등은 공유하기 때문에 전환 시 재설정해야 할 데이터의 양이 적어 전환 속도가 빠릅니다.

2. 효율적인 데이터 공유

공유 메모리

같은 프로세스 내의 스레드들은 힙 영역 등 주요 메모리 공간을 공유하므로, 데이터 전달이 빠르고 간편합니다.

동기화 관리

스레드 간의 데이터 공유는 IPC와 같은 복잡한 메커니즘 없이도 이루어지지만, 동시에 접근할 경우 동기화 문제는 여전히 존재합니다.

3. 응답성 및 처리 성능 향상

병렬 처리

멀티쓰레딩을 통해 I/O 작업과 CPU 집약적 작업을 분리하여 동시에 처리할 수 있으므로, 시스템 전체의 응답성이 향상됩니다.

리소스 활용 최적화

CPU의 멀티코어 환경에서 각 스레드를 개별 코어에 할당하여 병렬 처리가 가능해지므로, 시스템 자원을 더욱 효율적으로 사용할 수 있습니다.

✔️ 멀티 프로세싱 (Multi-Processing)

두 개 이상의 프로세서나 코어를 활용하여, 여러 프로세스가 동시에 실행되는 시스템입니다.

Loading comments...