멀티쓰레딩
하나의 프로세스 내에서 여러 스레드를 통해 여러 작업을 동시에 실행하는 방식입니다.
핵심 특징
1. 경량화된 실행 단위
- 스레드는 같은 프로세스 내에서 실행되므로, 프로세스 간 컨텍스트 스위칭에 비해 스레드 간 전환이 훨씬 가볍고 빠릅니다.
- 각 스레드는 자신만의 스택과 프로그램 카운터를 갖지만 코드·힙 영역은 공유하기 때문에, 전환 시 재설정해야 할 데이터의 양이 적습니다.
2. 효율적인 데이터 공유
- 같은 프로세스 내의 스레드들은 힙 영역 등 주요 메모리 공간을 공유하므로 데이터 전달이 빠르고 간편합니다.
- 다만 여러 스레드가 동시에 접근하면 경쟁 상태와 같은 동기화 문제가 여전히 발생할 수 있습니다.
3. 응답성 및 처리 성능 향상
- I/O 작업과 CPU 집약적 작업을 별도 스레드로 분리해 동시에 처리할 수 있어 시스템 전체의 응답성이 향상됩니다.
- 멀티코어 환경에서 각 스레드를 개별 코어에 할당하면 병렬 처리가 가능해져 자원을 더 효율적으로 사용할 수 있습니다.
멀티태스킹과의 차이
멀티태스킹이 여러 프로세스를 짧은 시간 단위로 번갈아 실행하는 방식이라면, 멀티쓰레딩은 하나의 프로세스 내부에서 여러 스레드로 작업을 나누는 방식입니다. 프로세스 간 전환보다 스레드 간 전환의 비용이 낮기 때문에, 멀티쓰레딩은 멀티태스킹보다 더 낮은 비용으로 동시성을 확보할 수 있습니다.
주의사항
스레드들이 메모리를 공유하다 보니 경쟁 상태나 교착 상태와 같은 동기화 문제가 발생할 수 있고, 이를 해결하는 과정이 복잡해지거나 디버깅이 어려워질 수 있습니다. 또한 스레드 관리를 소홀히 하면 시스템 자원이 과도하게 사용될 위험도 있습니다.
핵심 정리
멀티쓰레딩은 프로세스 기반 멀티태스킹보다 낮은 비용의 컨텍스트 스위칭과 효율적인 메모리 공유, 빠른 데이터 전달을 가능하게 합니다. 다만 공유 자원에 대한 동기화 문제는 별도로 해결해야 합니다.