프로세스와 스레드의 차이
중요도: ⭐⭐⭐⭐⭐
운영체제의 핵심 개념이며, 멀티태스킹 환경에서 필수적인 지식입니다.
기본 개념
프로세스 (Process)
운영체제로부터 자원을 할당받는 작업의 단위
- 실행 중인 프로그램의 인스턴스
- 독립적인 메모리 공간을 할당받음
- 최소 하나의 스레드(메인 스레드)를 포함
스레드 (Thread)
할당받은 자원을 이용하여 실행되는 실행 흐름의 단위
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 경량 프로세스(Light Weight Process)라고도 불림
- 프로세스의 자원을 공유하면서 실행
메모리 구조 비교
프로세스 메모리 구조
┌─────────────────┐
│ Stack │ ← 각 프로세스마다 독립
├─────────────────┤
│ Heap │ ← 각 프로세스마다 독립
├─────────────────┤
│ Data │ ← 각 프로세스마다 독립
├─────────────────┤
│ Code │ ← 각 프로세스마다 독립
└─────────────────┘스레드 메모리 구조
Process Memory Space
┌─────────────────┐
│ Stack (Thread1) │ ← 각 스레드마다 독립
├─────────────────┤
│ Stack (Thread2) │ ← 각 스레드마다 독립
├─────────────────┤
│ Heap │ ← 스레드들이 공유
├─────────────────┤
│ Data │ ← 스레드들이 공유
├─────────────────┤
│ Code │ ← 스레드들이 공유
└─────────────────┘메모리 공유 특징
프로세스 내의 스레드들은 Code, Data, Heap 영역을 공유하지만 Stack 영역은 각자 따로 가지고 있습니다.
멀티 프로세스 vs 멀티 스레드
멀티 프로세스
하나의 프로그램을 여러 개의 프로세스로 나누어 각 프로세스가 하나의 작업을 처리하는 방식
장점
- 안정성: 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않음
- 독립성: 각 프로세스가 독립적인 메모리 공간을 가짐
- 보안성: 프로세스 간 메모리 격리로 보안이 좋음
단점
- 높은 자원 사용량: 더 많은 메모리 공간과 CPU 시간을 차지
- 느린 통신: IPC(Inter-Process Communication) 필요
- Context Switching 비용: 프로세스 전환 시 오버헤드가 큼
멀티 스레드
하나의 프로그램을 여러 개의 스레드로 나누어 각 스레드가 하나의 작업을 처리하는 방식
장점
- 효율적 자원 사용: 시스템 자원 소모가 줄어듦
- 빠른 통신: 메모리를 공유하므로 데이터 교환이 빠름
- 높은 처리량: 시스템 처리량이 향상됨
- 빠른 Context Switching: 스레드 전환 비용이 적음
단점
- 복잡한 디버깅: 디버깅이 까다로움
- 안정성 문제: 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음
- 동기화 이슈: 공유 자원에 대한 동기화 필요
- 데드락: 상호 배제로 인한 교착상태 발생 가능
실제 예시
웹 브라우저 - 멀티 프로세스 방식
Chrome Browser
├── Main Process (UI, 네트워크 등)
├── Renderer Process (탭1)
├── Renderer Process (탭2)
├── Plugin Process
└── GPU ProcessNode.js - 싱글 스레드 + 워커 스레드
// 메인 스레드 (이벤트 루프)
const { Worker, isMainThread, parentPort } = require("worker_threads");
if (isMainThread) {
// 메인 스레드에서 워커 생성
const worker = new Worker(__filename);
worker.postMessage(42);
worker.on("message", (result) => {
console.log(`Result: ${result}`);
});
} else {
// 워커 스레드에서 실행
parentPort.on("message", (data) => {
const result = heavyCalculation(data);
parentPort.postMessage(result);
});
}Context Switching
프로세스 Context Switching
- 현재 프로세스의 PCB(Process Control Block) 저장
- CPU 레지스터, 메모리 맵 등 모든 상태 저장
- 새로운 프로세스의 PCB 로드
- 메모리 주소 공간 전환 (비용이 큼)
스레드 Context Switching
- 현재 스레드의 레지스터 상태만 저장
- 새로운 스레드의 레지스터 상태 로드
- 메모리 주소 공간은 동일하므로 전환 불필요 (비용이 적음)
면접 팁
이 주제에 대해서는 구체적인 예시와 함께 설명할 수 있어야 합니다. 특히 웹 개발 맥락에서 브라우저의 멀티 프로세스 구조나 Node.js의 이벤트 루프와 워커 스레드에 대해 언급하면 좋습니다.
Edit on GitHub
Last updated on