클라이언트 프로그래머의 서버 공부 시작글입니다.
다시 기초부터 시작합니다..
C++ 프로세스와 쓰레드의 차이
C++에서 프로세스(Process)와 쓰레드(Thread)는 모두 실행 단위를 의미하지만, 동작 방식과 사용 목적이 다릅니다.
1. 프로세스(Process)란?
프로세스는 운영체제(OS)에서 실행 중인 프로그램을 의미합니다.
- 각각의 프로세스는 독립적인 메모리 공간(주소 공간)을 가짐
- 다른 프로세스와 메모리를 공유하지 않음
- 프로세스 간의 통신(IPC, Inter-Process Communication)은 추가적인 작업이 필요함
프로세스의 특징
- 독립적인 실행 단위
- 운영체제가 직접 관리
- 하나의 프로세스가 종료되어도 다른 프로세스에 영향을 주지 않음
- 실행 속도가 비교적 느림 (프로세스 간 문맥 전환 비용이 큼)
2. 쓰레드(Thread)란?
쓰레드는 프로세스 내에서 실행되는 작은 실행 단위입니다.
- 하나의 프로세스 내에서 여러 개의 쓰레드를 가질 수 있음 (멀티쓰레딩)
- 같은 프로세스의 메모리를 공유 (데이터 영역, 힙 영역 등)
- 하지만 각각의 쓰레드는 독립적인 스택(Stack)과 레지스터(Register)를 가짐
쓰레드의 특징
- 같은 프로세스 내에서 동작
- 메모리 공유로 인해 빠른 데이터 교환 가능
- 실행 속도가 빠름 (쓰레드 간 문맥 전환 비용이 적음)
- 하지만 동기화 문제(Race condition, Deadlock 등)가 발생할 수 있음
3. 프로세스와 쓰레드의 차이 비교
비교 항목프로세스(Process)쓰레드(Thread)
실행 단위 | 독립적인 실행 단위 | 프로세스 내부의 실행 단위 |
메모리 구조 | 독립적인 메모리 공간 | 프로세스의 메모리 공유 |
통신 방식 | 프로세스 간 통신(IPC) 필요 | 메모리를 공유하여 빠른 데이터 전달 가능 |
실행 속도 | 느림 (문맥 전환 비용 큼) | 빠름 (문맥 전환 비용 적음) |
안정성 | 하나의 프로세스가 죽어도 다른 프로세스에 영향 없음 | 하나의 쓰레드 오류가 프로세스 전체에 영향을 줄 수 있음 |
활용 예시 | 운영체제 프로세스, 대형 애플리케이션 | 멀티쓰레딩 서버, 게임 엔진 |
4. C++에서 프로세스와 쓰레드 사용 방법
1) C++에서 프로세스 생성 (fork() - 리눅스)
C++에서는 보통 fork()를 사용하여 새로운 프로세스를 생성합니다.
fork()는 리눅스에서만 사용 가능하며, Windows에서는 CreateProcess()를 사용해야 합니다.
2) C++에서 쓰레드 생성 (std::thread)
C++11부터 std::thread를 사용하여 쉽게 멀티쓰레딩을 구현할 수 있습니다.
5. 언제 프로세스를 사용하고, 언제 쓰레드를 사용할까
프로세스가 적합한 경우
- 서로 독립적인 작업을 수행해야 할 때
- 보안적으로 분리된 환경이 필요할 때
- 크롬 브라우저처럼 여러 개의 독립적인 작업이 필요한 경우
쓰레드가 적합한 경우
- 같은 데이터를 여러 작업에서 공유해야 할 때
- 실행 속도가 중요한 멀티태스킹 프로그램 (ex: 게임, 웹 서버)
- 자원을 효율적으로 활용해야 할 때
6. 결론
- 프로세스는 서로 독립적인 실행 단위로 동작하며, 메모리를 공유하지 않음.
- 쓰레드는 같은 프로세스 내에서 실행되며, 메모리를 공유하여 빠르게 작업을 수행할 수 있음.
- 멀티쓰레딩은 성능을 향상시키지만 동기화 문제를 신경 써야 함.
따라서, 프로그램의 특성과 요구사항에 따라 적절한 방식을 선택하는 것이 중요합니다.
'게임 프로그래밍 > WINDOW SERVER' 카테고리의 다른 글
Atomic (0) | 2025.02.25 |
---|---|
쓰레드 thread (0) | 2025.02.25 |