프로세스 vs 스레드: 차이점 설명

프로세스는 자체 전용 주소 공간과 자원을 가진 실행 중인 프로그램입니다. 스레드는 프로세스 안의 실행 단위입니다. 한 프로세스의 모든 스레드는 메모리를 공유하므로 생성 비용이 낮고 통신이 빠르지만, 버그나 크래시 하나가 프로세스 전체에 영향을 줄 수 있습니다. 별개의 프로세스끼리는 서로 격리되어 더 안전하지만, 생성과 프로세스 간 통신에 더 많은 비용이 듭니다.

비교 항목프로세스스레드
정의자체 주소 공간, 파일, 기타 자원을 가진 실행 중인 프로그램프로세스 내부의 실행 경로로, 자체 스택과 레지스터를 가짐
메모리다른 프로세스와 격리된 독립적인 가상 주소 공간프로세스의 코드, 힙, 전역 데이터를 공유하며 스택만 전용
생성 비용더 무거움: 새 주소 공간을 구성해야 함(copy-on-write로 비용 감소)더 가벼움: 새 주소 공간이 필요 없음
컨텍스트 스위칭더 비쌈: 주소 공간이 바뀌고 캐시된 변환 정보(TLB)가 사라질 수 있음더 저렴함: 주소 공간과 캐시가 그대로 유지됨
통신파이프, 소켓, 공유 메모리 같은 프로세스 간 통신(IPC)이 필요공유 메모리를 직접 읽고 쓰므로 빠름
격리와 장애크래시가 보통 해당 프로세스 안에 머묾한 스레드의 크래시가 프로세스 전체를 중단시킬 수 있음
동기화프로세스가 메모리나 파일을 공유할 때 필요공유 데이터에는 항상 필요: 뮤텍스와 원자적 연산이 없으면 데이터 레이스와 데드락이 발생
스케줄링하나 이상의 스레드를 포함운영체제가 실제로 CPU 코어에 스케줄링하는 단위
대표 용도격리와 보안: 브라우저 탭, 서비스, 셸 파이프라인한 프로그램 내부의 병렬 작업: 다수의 연결을 처리하는 서버, 백그라운드 작업, 병렬 연산

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

프로세스
격리, 견고성, 보안이 필요하거나, 서로 다른 주체가 작성한 소프트웨어가 메모리를 공유하면 안 될 때.
스레드
작업끼리 데이터를 빠르게 공유해야 하고 한 프로그램 안에서 여러 CPU 코어를 활용하고 싶을 때.
주의 필요
스레드가 메모리를 공유한다는 점은 강점이자 위험입니다. 공유 데이터는 락이나 원자적 연산으로 보호하고 데드락에 유의하세요.

자주 묻는 질문

스레드는 메모리를 공유하나요?

네. 한 프로세스의 스레드는 코드, 힙, 전역 데이터를 공유합니다. 각 스레드는 자체 스택과 레지스터를 가집니다.

스레드가 프로세스보다 생성 비용이 낮은 이유는 무엇인가요?

새 프로세스는 자체 주소 공간이 필요하지만 스레드는 소속 프로세스의 주소 공간을 재사용합니다. 스레드 간 전환도 주소 공간을 바꾸지 않으므로 비용이 적게 듭니다.

스레드 하나가 크래시하면 어떻게 되나요?

스레드들이 메모리를 공유하므로 프로세스 전체가 중단될 수 있습니다. 한 프로세스의 크래시는 보통 다른 프로세스에 영향을 주지 않습니다.

스레드 대신 프로세스를 써야 하는 경우는 언제인가요?

브라우저 탭이나 독립 서비스처럼 격리와 견고성이 필요하거나, 서로 다른 부분이 다른 부분의 메모리를 손상시키지 못해야 할 때입니다.

주요 용어 설명

コンテキストスイッチ
CPUで実行するプロセスやスレッドを切り替えること。レジスタやプログラムカウンタなどの状態を保存・復元し、プロセスの切り替えではアドレス空間も切り替える。
ミューテックス
同時に1つのスレッドだけが持てるロック。取れないときはスレッドを眠らせてCPUを譲り、解放されるとOSが起こす実装が一般的。
デッドロック
複数のスレッドがそれぞれ資源を持ったまま、ほかのスレッドが持つ資源を待ち合い、誰も先に進めなくなる状態。ロックを取る順番を全体で決めて防ぐ。

관련 비교