다섯 살도 알 수 있게 · 시스템SW

프로세스와 스레드가 뭐예요?

프로세스와 스레드를, 차 한 대를 같이 고치는 손들과 각자 다른 차 이야기로 풀어봤어요.

엔진을 통째로 분해하는 큰 작업 하나정비사 한 명이서는 너무 오래 걸려요

엔진 분해, 혼자서는 너무 오래 걸려요.정비사 한 명이서는 너무 오래 걸려요.

아예 새 차를 한 대 더 들여올 수도 있어요근데 차마다 공구함·트렁크를 다 따로 챙겨야 해서 번거로워요

아예 새 차를 한 대 더 들여올 수도 있어요.차마다 공구함·트렁크를 따로 챙겨야 해서 번거로워요.

같은 차, 같은 트렁크를 같이 써요(스레드)완전히 다른 트렁크예요(프로세스)스레드 = 같은 차 안에서 같이 일하는 손, 프로세스 = 각자 다른 차같은 차 안의 손들은 트렁크를 공유하지만, 다른 차의 트렁크는 못 봐요

스레드 = 같은 차 안 여러 손, 프로세스 = 각자 다른 차예요.같은 차 안의 손들은 트렁크를 공유하지만, 다른 차의 트렁크는 못 봐요.

프로세스독립된 차, 독립된 메모리 공간
스레드같은 차 안에서 함께 일하는 손
컨텍스트 스위치다른 차로 옮겨탈 때 시간이 들어요
공유 메모리 위험같은 트렁크를 같이 쓰다 부딪혀요
프로세스 vs 스레드프로세스: 독립된 차, 독립된 트렁크프로세스: 만들기 무겁고, 느려요스레드: 같은 차, 같은 트렁크 공유스레드: 만들기 가볍고, 빨라요메모리(트렁크)를 공유하느냐가 핵심 차이예요스레드는 프로세스 안에서 돌아가는, 실제 스케줄링의 단위예요

메모리(트렁크)를 공유하느냐가 핵심 차이예요.스레드는 프로세스 안에서 돌아가는, 실제 스케줄링의 단위예요.

트렁크를 같이 쓰니 따로 챙길 때보다 훨씬 빨라요두 손이 같은 부품에 동시에 손대면 서로 부딪혀요그래서 같이 쓰는 트렁크엔 동기화 규칙이 꼭 필요해요

손 둘이 트렁크를 같이 쓰면 따로 챙길 때보다 빠르지만, 부딪히면 둘 다 일을 망쳐요.그래서 같이 쓰는 트렁크엔 동기화 규칙이 꼭 필요해요.

한 줄로

프로세스 = 각자 독립된 차(독립된 메모리). 스레드 = 같은 차 안에서 트렁크(메모리)를 같이 쓰며 일하는 여러 손.

프로세스는 운영체제가 할당하는 독립된 메모리 공간을 가진 실행 단위로, 서로의 메모리를 직접 들여다볼 수 없어요. 스레드는 한 프로세스 안에서 코드·데이터·힙은 공유하면서 스택과 레지스터만 따로 갖는, 더 가벼운 실행 단위예요. 프로세스 생성·전환은 비용이 크고, 스레드는 상대적으로 가볍지만 공유 메모리 때문에 동기화가 필요해요. 실제 CPU 스케줄링의 단위는 프로세스보다 스레드인 경우가 많아요.

어른들은 이렇게 불러요

프로세스
Process
독립된 차 한 대. 자기만의 메모리 공간을 가져요.
스레드
Thread
같은 차 안에서 함께 일하는 손. 코드·트렁크(메모리)는 공유, 손놀림(스택)만 따로예요.
컨텍스트 스위치
Context Switch
다른 차로 옮겨탈 때 드는 시간. 스레드가 프로세스보다 훨씬 가벼워요.
동기화(세마포어·뮤텍스)
Synchronization
리프트 열쇠를 나눠주는 규칙. 같은 트렁크를 공유하는 스레드에 특히 중요해요. → 리프트 열쇠는 하나뿐
교착상태
Deadlock
서로의 열쇠를 기다리며 영원히 멈춤. 스레드끼리도, 프로세스끼리도 생길 수 있어요. → 서로의 열쇠를 기다리며 멈춘 정비공장
가상메모리
Virtual Memory
창고 전체를 내 것처럼 보여주는 가짜 지도. 프로세스마다 이 가짜 지도를 따로 가져요. → 창고 전체를 내 것처럼 보여주는 가짜 지도
CPU 스케줄링
CPU Scheduling
순서판에 적힌 차 순서 규칙. 실제로 순서판에 오르는 건 대개 스레드예요. → 리프트에 누가 먼저 올라갈까
GPU의 많은 손
The GPU's Many Hands
똑같은 간단한 일을 한번에 나눠 하는 보조 정비팀. 여러 손으로 일을 나누는 점은 닮았지만, GPU는 같은 계산을 한꺼번에 돌리는 데 특화됐어요. → 수백 명이 함께 움직이는 보조 정비팀
다음 이야기
갈림길에서 반씩 줄여가는 선반 지도 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →