스레드(Thread)
스레드는 프로세스 내에서 실행되는 작업 단위이다. 하나의 프로세스는 최소 하나의 스레드를 가지며, 이를 메인 스레드라고 한다.
특징
- 스레드는 프로세스의 자원을 공유한다.
- 공유되는 자원: 메모리(코드, 데이터, 힙)와 열린 파일.
- 개별적인 자원: 스택, CPU 레지스터.
- 스레드는 경량화된 실행 단위로, 같은 프로세스 내에서 통신 속도가 빠르다.
- 하나의 스레드가 실패하면 같은 프로세스의 다른 스레드에도 영향을 미칠 수 있다.
멀티스레드(Multi-threading)
멀티스레드는 하나의 프로세스에서 여러 스레드가 동시에 실행되는 구조를 말한다.
특징
- 병렬성: CPU 코어 수에 따라 여러 스레드가 병렬적으로 실행.
- 자원 효율성: 스레드는 프로세스의 자원을 공유하므로, 멀티프로세싱보다 메모리 사용량이 적다.
- 스레드 간 통신: 공유 메모리를 사용하여 빠르고 간단하게 데이터 교환 가능.
- 단점:
- 스레드 간 자원 충돌 가능(예: 동시 접근으로 인한 데이터 손상).
- 이를 해결하기 위해 뮤텍스, 세마포어 등의 동기화 도구가 필요.
멀티프로세싱(Multi-processing)
멀티프로세싱은 하나의 작업을 여러 프로세스로 분리하여 병렬 실행하는 구조이다.
특징
- 독립성:
- 각 프로세스는 자체 메모리 공간을 가진다.
- 하나의 프로세스가 실패해도 다른 프로세스에는 영향을 미치지 않는다.
- 병렬 처리:
- 여러 CPU 코어를 활용해 작업 처리 속도를 높임.
- 프로세스 간 통신(IPC):
- 프로세스는 서로 독립적이므로 데이터 공유를 위해 IPC(메시지 전달, 공유 메모리 등)가 필요.
- 단점:
- 메모리 사용량이 크며, 프로세스 간 통신이 상대적으로 느림.
스레드 vs. 멀티스레드
| 항목 | 스레드 | 멀티스레드 |
|---|
| 실행 단위 | 단일 스레드 | 여러 스레드가 병렬 실행. |
| 자원 공유 | 단일 스레드로만 자원 사용 | 프로세스 자원을 공유. |
| 장점 | 구현이 간단. | 작업을 병렬 처리해 성능 향상. |
| 단점 | 단일 작업 처리에 한정됨. | 동기화 문제로 디버깅이 복잡. |
멀티프로세스와 멀티스레드의 차이
| 항목 | 멀티프로세스 | 멀티스레드 |
|---|
| 메모리 구조 | 각 프로세스가 독립적인 메모리 공간을 가짐. | 하나의 메모리 공간을 공유. |
| 통신 방식 | IPC(메시지 전달, 공유 메모리 등) 사용. | 공유 메모리를 통해 빠른 통신 가능. |
| 병렬 처리 성능 | CPU 코어 수에 따라 독립적 병렬 처리 가능. | 병렬 처리 시 메모리 효율적 사용. |
| 오버헤드 | 프로세스 생성, 통신 비용이 큼. | 스레드 생성, 전환 비용이 적음. |
| 안정성 | 한 프로세스가 실패해도 다른 프로세스는 영향 없음. | 한 스레드 실패 시 전체 프로세스에 영향을 줌. |
| 적합한 작업 | CPU 집약적인 작업(대규모 연산, 병렬 컴퓨팅). | IO 중심 작업(네트워크 요청, 파일 읽기/쓰기). |
멀티스레드와 멀티프로세싱을 함께 사용하는 경우
멀티스레드와 멀티프로세싱은 상호 보완적으로 사용할 수 있다.
활용 사례
- 웹 서버:
- 멀티프로세싱으로 여러 클라이언트를 처리.
- 각 프로세스 내에서 멀티스레드로 작업(예: 데이터베이스 요청 처리).
- 대규모 데이터 처리:
- 멀티프로세싱으로 데이터 세그먼트를 분할하여 작업.
- 각 프로세스에서 멀티스레드로 세부 작업 처리.
정리
- 스레드: 프로세스 내의 실행 단위로, 메모리를 공유하며 작업을 수행.
- 멀티스레드: 하나의 프로세스에서 여러 작업을 병렬로 수행.
- 멀티프로세싱: 프로세스를 여러 개 생성하여 병렬 작업 수행.
- 멀티프로세스 vs. 멀티스레드:
- 멀티스레드는 메모리 공유로 자원을 효율적으로 사용하지만, 동기화 문제가 복잡.
- 멀티프로세싱은 안정성이 높지만, 메모리 사용량과 통신 비용이 크다.
적합한 사용 방식은 작업의 특성에 따라 결정된다. CPU 집약적인 작업에는 멀티프로세싱이, IO 중ㅇ심 작업에는 멀티스레드가 유리하다.