-
[CS] 프로세스(Process)와 스레드(Thread)의 차이CS 2025. 1. 20. 01:48
프로세스(Process)
- 운영체제가 관리하는 프로그램의 실행 단위.
- 실행 중인 프로그램은 독립된 메모리 공간(Code, Data, Heap, Stack 등)를 가짐.
- 하나의 프로세스는 여러 개의 스레드를 포함할 수 있음.
✅ 프로세스의 특징
- 독립적인 실행 환경을 가짐 → 한 프로세스가 종료되어도 다른 프로세스에는 영향 없음.
- CPU 스케줄링을 통해 실행됨.
- 프로세스 간 데이터 공유가 어렵고, IPC(Inter-Process Communication)를 사용해야 함.
- 문제가 발생하면 개별 프로세스만 영향을 받음.
1. 크롬(Chrome)을 실행하면 하나의 프로세스가 실행됨. 2. 크롬에서 여러 개의 탭을 열면, 각각의 탭이 개별 프로세스로 실행됨. 3. 한 탭이 충돌해도 다른 탭에는 영향을 미치지 않음 (Sandboxing).
📌 프로세스의 메모리 구조
- Code 영역: 실행 코드 저장
- Data 영역: 전역 변수 저장
- Heap 영역: 동적 할당된 메모리
- Stack 영역: 함수 호출 스택, 지역 변수 저장 (각 스레드는 독립적인 Stack을 가짐)
[ 프로세스 메모리 구조 ] -------------------------------------- | Code (코드 영역) | -------------------------------------- | Data (데이터 영역, 전역 변수) | -------------------------------------- | Heap (동적 할당 메모리) | -------------------------------------- | Stack (스레드 1) | | Stack (스레드 2) | | Stack (스레드 3) | --------------------------------------
✅ 프로세스 기반 예제 (크롬 브라우저)
- 크롬 브라우저는 각 탭을 별도의 프로세스로 실행.
- 한 탭이 충돌해도 다른 탭에는 영향 없음.
[크롬 프로세스 구조] -------------------------------------- | Chrome.exe (프로세스 1 - 메인) | -------------------------------------- | Chrome.exe (프로세스 2 - 탭 1) | -------------------------------------- | Chrome.exe (프로세스 3 - 탭 2) | --------------------------------------
스레드(Thread)
- 프로세스 내부에서 실행되는 작은 실행 단위.
- 같은 프로세스의 스레드는 Code, Heap, Data 영역을 공유하며, 각자 독립적인 Stack을 가짐.
- 멀티스레딩(Multithreading)을 사용하면 하나의 프로세스에서 여러 작업을 병렬로 수행할 수 있음.
✅ 스레드의 특징
- 같은 프로세스 내에서 실행되며, Code, Heap, Data를 공유.
- 새로운 스레드를 생성하는 비용이 프로세스보다 적음.
- Context Switching이 빠름 (프로세스보다 가벼움).
- 동기화 문제가 발생할 수 있음 (공유된 자원에 여러 스레드가 접근하므로 Race Condition, Deadlock 등의 문제가 발생할 수 있음).
1. MS Word에서 문서를 편집하면서 자동 저장이 실행됨 (편집 스레드 + 저장 스레드). 2. 크롬에서 동영상을 재생하면서, 동시에 다운로드가 진행됨 (재생 스레드 + 다운로드 스레드). 3. 게임에서 그래픽 처리와 물리 연산이 동시에 수행됨.
📌 스레드의 메모리 구조
- 같은 프로세스 내에서는 Code, Data, Heap 영역을 공유하지만, 각 스레드는 독립적인 Stack을 가짐.
- 따라서 전역 변수는 스레드 간 공유되지만, 지역 변수는 공유되지 않음.
✅ 스레드 기반 예제 (게임 엔진)
- Unreal Engine이나 Unity는 렌더링, 물리 연산, 네트워크 통신을 각각 스레드로 처리.
- 게임이 멈추지 않고 여러 작업을 동시에 수행 가능.
[게임 엔진의 멀티스레딩 구조] -------------------------------------- | 메인 스레드 (Game Logic) | -------------------------------------- | 렌더링 스레드 (Graphics) | -------------------------------------- | 물리 연산 스레드 (Physics) | -------------------------------------- | AI 스레드 (AI 처리) | --------------------------------------
추가) 스레드가 프로세스를 완전히 대체할 수 없는 이유?
🚀 스레드는 가볍고 빠르지만, 프로세스를 대체할 수 없는 이유 1️⃣ 독립적인 실행 환경을 제공하지 못함 → 한 스레드가 죽으면 전체 프로세스가 죽을 수 있음 2️⃣ 메모리 보호 기능이 부족함 → 하나의 스레드가 잘못된 메모리 접근을 하면 전체 프로세스에 영향을 줌 3️⃣ 충돌이 발생하면 전체 프로세스가 영향을 받음 4️⃣ 멀티코어 CPU 활용이 제한됨 → 프로세스는 여러 개의 CPU 코어를 더 효과적으로 사용할 수 있음 5️⃣ 보안에 취약함 → 하나의 스레드가 해킹되면 전체 프로세스가 위험해질 수 있음 6️⃣ 프로세스 간 통신(IPC)이 필요한 경우 → 네트워크 분산 시스템에서는 프로세스가 필수적 'CS' 카테고리의 다른 글
[CS] DLL(Dynamic Link Library) (0) 2025.01.20 [CS] 배치 작업 처리 (0) 2023.05.12 [CS] 나만의 간단한 프레임워크 설계 방법 (0) 2023.05.10 [CS] Unmanaged Language VS Managed Language (0) 2023.05.08 [CS] 공통 코드 (0) 2023.05.08