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