포스트

Process and Thread

프로세스와 스레드는 무엇이 다른가

둘 다 실행 단위이지만 책임이 다르다.

  • Process: 실행 중인 프로그램 인스턴스이자 자원 소유 단위
  • Thread: 프로세스 안에서 실제 코드를 실행하는 흐름 단위

운영체제는 프로세스에 주소 공간과 파일 디스크립터 같은 자원을 할당하고, 스레드는 그 안에서 CPU를 사용해 실행된다.

메모리 관점 차이

프로세스는 기본적으로 서로 다른 주소 공간을 가진다. 한 프로세스의 메모리를 다른 프로세스가 직접 읽거나 쓰지 못한다.

반면 같은 프로세스 안의 스레드들은 다음을 공유한다.

  • 코드 영역
  • 전역 데이터
  • 힙 메모리
  • 열린 파일 디스크립터

대신 각 스레드는 다음을 별도로 가진다.

  • 스택
  • 프로그램 카운터
  • 레지스터 문맥

이 차이 때문에 스레드는 가볍고 빠르지만, 공유 자원 때문에 동기화 문제가 생긴다.

생성과 전환 비용

프로세스는 주소 공간과 커널 자원을 별도로 가져야 하므로 생성 비용이 더 크다. 문맥 전환도 일반적으로 더 무겁다.

스레드는 같은 프로세스 안에서 생성되기 때문에 상대적으로 가볍고, 전환 비용도 작다.

그래서:

  • 안정성과 격리가 중요하면 프로세스
  • 효율과 빠른 공유가 중요하면 스레드

라는 방향으로 판단하는 경우가 많다.

오류 전파 관점

프로세스는 서로 격리돼 있어서 하나가 죽어도 다른 프로세스에 직접 영향을 주지 않는다. 반대로 스레드는 같은 프로세스 안에서 자원을 공유하기 때문에, 한 스레드의 심각한 오류가 전체 프로세스를 흔들 수 있다.

이 점 때문에 브라우저 탭을 프로세스로 분리하거나, 워커를 별도 프로세스로 띄우는 설계가 자주 등장한다.

실무에서 어떻게 쓰이나

프로세스가 잘 맞는 경우

  • 작업 간 강한 격리가 필요할 때
  • 장애 전파를 줄이고 싶을 때
  • 서로 다른 런타임이나 권한 모델을 써야 할 때

스레드가 잘 맞는 경우

  • 같은 메모리를 빠르게 공유해야 할 때
  • 요청 처리, 백그라운드 작업, 이벤트 루프를 함께 운영할 때
  • 프로세스 분리 비용이 과할 때

정리

프로세스는 자원 소유와 격리의 단위이고, 스레드는 실행의 단위다. 둘의 차이는 단순 용어 문제가 아니라, 성능·안정성·동기화 비용을 결정하는 설계 기준이다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

댓글

아직 댓글이 없습니다