다섯 살도 알 수 있게 · 시스템SW
프로세스와 스레드가 뭐예요?
프로세스와 스레드를, 차 한 대를 같이 고치는 손들과 각자 다른 차 이야기로 풀어봤어요.
엔진 분해, 혼자서는 너무 오래 걸려요.정비사 한 명이서는 너무 오래 걸려요.
아예 새 차를 한 대 더 들여올 수도 있어요.차마다 공구함·트렁크를 따로 챙겨야 해서 번거로워요.
스레드 = 같은 차 안 여러 손, 프로세스 = 각자 다른 차예요.같은 차 안의 손들은 트렁크를 공유하지만, 다른 차의 트렁크는 못 봐요.
프로세스독립된 차, 독립된 메모리 공간
스레드같은 차 안에서 함께 일하는 손
컨텍스트 스위치다른 차로 옮겨탈 때 시간이 들어요
공유 메모리 위험같은 트렁크를 같이 쓰다 부딪혀요
메모리(트렁크)를 공유하느냐가 핵심 차이예요.스레드는 프로세스 안에서 돌아가는, 실제 스케줄링의 단위예요.
손 둘이 트렁크를 같이 쓰면 따로 챙길 때보다 빠르지만, 부딪히면 둘 다 일을 망쳐요.그래서 같이 쓰는 트렁크엔 동기화 규칙이 꼭 필요해요.
한 줄로
프로세스 = 각자 독립된 차(독립된 메모리). 스레드 = 같은 차 안에서 트렁크(메모리)를 같이 쓰며 일하는 여러 손.
프로세스는 운영체제가 할당하는 독립된 메모리 공간을 가진 실행 단위로, 서로의 메모리를 직접 들여다볼 수 없어요. 스레드는 한 프로세스 안에서 코드·데이터·힙은 공유하면서 스택과 레지스터만 따로 갖는, 더 가벼운 실행 단위예요. 프로세스 생성·전환은 비용이 크고, 스레드는 상대적으로 가볍지만 공유 메모리 때문에 동기화가 필요해요. 실제 CPU 스케줄링의 단위는 프로세스보다 스레드인 경우가 많아요.
어른들은 이렇게 불러요
- 프로세스
Process - 독립된 차 한 대. 자기만의 메모리 공간을 가져요.
- 스레드
Thread - 같은 차 안에서 함께 일하는 손. 코드·트렁크(메모리)는 공유, 손놀림(스택)만 따로예요.
- 컨텍스트 스위치
Context Switch - 다른 차로 옮겨탈 때 드는 시간. 스레드가 프로세스보다 훨씬 가벼워요.
- 동기화(세마포어·뮤텍스)
Synchronization - 리프트 열쇠를 나눠주는 규칙. 같은 트렁크를 공유하는 스레드에 특히 중요해요. → 리프트 열쇠는 하나뿐
- 교착상태
Deadlock - 서로의 열쇠를 기다리며 영원히 멈춤. 스레드끼리도, 프로세스끼리도 생길 수 있어요. → 서로의 열쇠를 기다리며 멈춘 정비공장
- 가상메모리
Virtual Memory - 창고 전체를 내 것처럼 보여주는 가짜 지도. 프로세스마다 이 가짜 지도를 따로 가져요. → 창고 전체를 내 것처럼 보여주는 가짜 지도
- CPU 스케줄링
CPU Scheduling - 순서판에 적힌 차 순서 규칙. 실제로 순서판에 오르는 건 대개 스레드예요. → 리프트에 누가 먼저 올라갈까
- GPU의 많은 손
The GPU's Many Hands - 똑같은 간단한 일을 한번에 나눠 하는 보조 정비팀. 여러 손으로 일을 나누는 점은 닮았지만, GPU는 같은 계산을 한꺼번에 돌리는 데 특화됐어요. → 수백 명이 함께 움직이는 보조 정비팀
다음 이야기
갈림길에서 반씩 줄여가는 선반 지도 →