프로세스와 스레드 차이 — CS 면접 핵심 정리
프로세스와 스레드 차이, 면접에서 자주 묻는 이유
프로세스와 스레드 차이는 운영체제 CS 면접의 핵심 단골 질문입니다. 한 줄로 답하면 프로세스는 실행 중인 프로그램의 인스턴스로 독립된 메모리 공간을 갖고, 스레드는 그 프로세스 안에서 실행되는 흐름의 단위로 프로세스의 메모리를 공유합니다. 이 '메모리를 공유하느냐'가 모든 차이의 출발점입니다.
프로세스와 스레드의 핵심 차이
| 구분 | 프로세스(Process) | 스레드(Thread) |
|---|---|---|
| 정의 | 실행 중인 프로그램의 인스턴스 | 프로세스 내 실행 흐름의 단위 |
| 메모리 | 독립된 공간(Code/Data/Heap/Stack) | Code/Data/Heap 공유, Stack은 개별 |
| 자원 | 각자 할당 | 프로세스 자원 공유 |
| 통신 | IPC 필요(파이프, 소켓, 공유메모리 등) | 전역 변수, Heap으로 직접 공유 |
| 컨텍스트 스위칭 비용 | 큼(주소 공간 전환, 캐시 무효화) | 상대적으로 작음 |
| 안정성 | 한 프로세스 죽어도 다른 프로세스 영향 적음 | 한 스레드 오류가 전체 프로세스에 영향 |
1. 메모리 구조 — 핵심 중의 핵심
프로세스는 각자 독립된 가상 주소 공간을 갖습니다. Code(코드), Data(전역/정적 변수), Heap(동적 할당), Stack(지역 변수, 함수 호출) 영역이 프로세스마다 별도로 존재합니다. 그래서 한 프로세스가 다른 프로세스의 메모리에 함부로 접근할 수 없어 안정적입니다.
반면 한 프로세스 안의 스레드들은 Code, Data, Heap을 공유하고 Stack과 레지스터(PC 등)만 각자 따로 갖습니다. 함수 호출 흐름은 스레드마다 독립적이어야 하므로 Stack은 분리되지만, 전역 변수나 동적 할당 객체는 공유됩니다. 이 공유 덕분에 스레드 간 통신은 빠르지만, 동시에 같은 데이터에 접근하면 동기화 문제(레이스 컨디션)가 생깁니다.
2. 컨텍스트 스위칭 비용
프로세스 간 전환은 주소 공간 자체를 바꿔야 하므로 TLB, 캐시를 무효화하는 비용이 큽니다. 스레드 간 전환은 같은 주소 공간 안에서 일어나 이 비용이 작습니다. 그래서 동일 작업을 여러 실행 흐름으로 쪼갤 때 스레드가 더 가볍습니다.
3. 안정성 vs 효율성의 트레이드오프
멀티프로세스는 한 프로세스가 죽어도 다른 프로세스가 살아 있어 안정적입니다(크롬이 탭마다 프로세스를 분리하는 이유). 멀티스레드는 자원 공유로 가볍고 통신이 빠르지만, 한 스레드의 오류(예: 세그폴트)가 프로세스 전체를 죽일 수 있습니다.
실제 예시로 이해하기
웹 브라우저를 떠올리면 쉽습니다. 크롬은 탭(또는 사이트)마다 별도 프로세스를 띄웁니다. 한 탭이 멈춰도 다른 탭은 멀쩡합니다. 반대로 한 워드 프로그램 안에서 '맞춤법 검사', '자동 저장', '입력 처리'는 같은 문서 데이터를 공유하며 동시에 돌아가는 스레드로 구현하면 효율적입니다.
면접 답변 예시
"프로세스는 실행 중인 프로그램의 인스턴스로 독립된 메모리 공간을 가집니다. 스레드는 프로세스 안의 실행 단위로, Code·Data·Heap을 공유하고 Stack과 레지스터만 개별로 가집니다. 그래서 스레드 간 통신은 전역 변수나 Heap으로 빠르게 할 수 있지만 동기화 문제가 생기고, 프로세스 간 통신은 IPC가 필요한 대신 서로 격리되어 안정적입니다. 컨텍스트 스위칭 비용도 스레드가 더 작습니다. 정리하면 멀티프로세스는 안정성, 멀티스레드는 자원 효율과 응답성에서 유리한 트레이드오프 관계입니다."
면접 꼬리질문 대비
Q1. 멀티스레드 환경의 레이스 컨디션과 해결 방법은?
여러 스레드가 공유 자원에 동시에 접근해 실행 순서에 따라 결과가 달라지는 현상이 레이스 컨디션입니다. 임계 구역(critical section)을 뮤텍스(Mutex), 세마포어(Semaphore), 모니터, 또는 락(lock)으로 보호해 한 번에 한 스레드만 접근하게 만들어 해결합니다. 다만 락 사용 시 데드락(교착 상태)을 주의해야 합니다.
Q2. 컨텍스트 스위칭이란 정확히 무엇이 저장되나요?
실행 중이던 작업의 상태(PCB/TCB)를 저장하고 다음 작업의 상태를 복원하는 과정입니다. 프로그램 카운터(PC), 레지스터 값, 스택 포인터 등이 저장·복원됩니다. 프로세스 전환은 여기에 메모리 맵(페이지 테이블) 전환과 TLB·캐시 무효화가 추가되어 더 비쌉니다.
Q3. 멀티프로세스가 멀티스레드보다 나은 경우는?
안정성과 격리가 중요할 때입니다. 한 작업의 크래시가 다른 작업에 전파되면 안 되는 경우(브라우저 탭, 워커 격리), 또는 Python처럼 GIL 때문에 CPU 바운드 작업에서 멀티스레드의 병렬성이 제한되는 경우 멀티프로세스가 유리합니다.