프로세스는 공간, 스레드는 흐름
프로세스는 자원을 담은 독립된 실행 공간이고, 스레드는 그 안에서 실제로 일을 진행하는 실행 흐름입니다.
VISUAL 01 · MEMORY
메모리를 나누는 방식
버튼을 눌러 “프로세스끼리 분리”와 “스레드끼리 공유”를 비교해 보세요.
두 집의 주소 공간은 나뉘어 있습니다. 데이터를 주고받으려면 IPC가 필요합니다.
한 집의 거실과 냉장고는 공유하지만, 각 사람은 자기 방과 메모장을 따로 씁니다.
Stack이 따로 있다는 것은 각 스레드가 함수 호출과 지역 변수를 기억하며 독립적인 실행 흐름을 가질 수 있다는 뜻입니다.
VISUAL 02 · CONTEXT SWITCH
문맥 교환은 이사와 교대의 차이
CPU가 작업 A를 멈추고 작업 B를 실행할 때 어떤 상태를 바꾸는지 확인합니다.
스레드 전환도 공짜는 아니지만, 같은 주소 공간을 유지한 채 실행 흐름 중심으로 바꾸는 경우가 많아 프로세스 전환보다 가벼운 편입니다.
COMPARE
나란히 비교하기
| 기준 | 프로세스 | 스레드 |
|---|---|---|
| 비유 | 서로 다른 집 | 한 집에 사는 사람 |
| Code · Data · Heap | 프로세스마다 독립 | 같은 프로세스 안에서 공유 |
| Stack | 프로세스마다 독립 | 스레드마다 따로 가짐 |
| 통신 | IPC가 필요함 | 공유 메모리 접근이 가능함 |
| 오류 영향 | 주소 공간이 분리되어 번짐이 적은 편 | 공유 메모리 오류가 전체에 영향을 줄 수 있음 |
| 문맥 교환 | 비용이 큰 편 | 비용이 작은 편 |
FRONTEND CONNECTION
Chrome 탭은 프로세스일까, 스레드일까?
정답은 “탭 하나를 둘 중 하나로 단정할 수 없다”입니다. Chrome은 여러 프로세스가 협력하고, 각 프로세스 안에서 여러 스레드가 움직이는 구조를 사용합니다.
하나의 탭 화면을 그리는 렌더러 프로세스 안에도 네트워크 대기, 렌더링, 작업 처리 등을 맡는 여러 스레드가 있을 수 있습니다.
VISUAL 03 · SYNCHRONIZATION
공유에는 잠금 규칙이 필요하다
두 스레드가 서로 다른 열쇠를 쥔 채 상대 열쇠를 기다리면 데드락이 됩니다.
잠금을 잡는 순서를 정하면 서로 기다리는 일을 줄일 수 있습니다.
CHECK YOUR UNDERSTANDING
이제 내 말로 설명해 보기
- 같은 프로세스의 두 스레드가 공유하는 메모리 영역은 무엇인가요?
- Stack이 스레드마다 따로 있다는 사실은 실행 흐름과 어떤 관계가 있나요?
- 프로세스끼리 데이터를 공유할 때 IPC가 필요한 이유는 무엇인가요?
- 두 스레드가 서로 상대의 잠금을 기다리는 상태를 무엇이라고 하나요?
- Chrome 탭을 곧바로 프로세스 하나라고 부르면 안 되는 이유는 무엇인가요?
정답과 해설 보기
Code, Data, Heap은 공유하고 Stack은 각자 가집니다. Stack이 따로 있으므로 각 스레드는 자기 함수 호출과 지역 변수를 기억하며 독립적인 실행 흐름을 가질 수 있습니다.
프로세스는 주소 공간이 분리되어 있어 서로의 데이터를 바로 읽을 수 없으므로 IPC가 필요합니다. 서로 잠금을 기다리는 상태는 데드락이며, 잠금 순서를 통일하는 방법으로 예방할 수 있습니다.
Chrome은 여러 프로세스와 그 안의 여러 스레드가 함께 동작하는 멀티프로세스 구조이므로 탭과 프로세스를 일대일로 볼 수 없습니다.
NEXT REVIEW
답변을 보내 주세요
위 질문에 자신의 말로 답하면 제가 채점하고, 헷갈린 부분을 다시 설명해 드립니다. 특히 “프로세스와 스레드의 메모리 공유 차이”와 “데드락을 피하는 방법”을 먼저 답해 보세요.