Skip to content

프로세스 & 스레드


프로세스: 실행 중인 프로그램 인스턴스. 독립된 가상 주소 공간과 자원을 가진다.

스레드: 프로세스 안에서 실행되는 흐름의 단위. 현대 운영체제에서 실제 스케줄링 단위인 경우가 많다.


기본적으로 하나의 프로세스는 최소 1개의 스레드를 가진다.

프로세스

프로세스 구조

프로세스는 각각 독립된 주소 공간과 커널 자원을 가진다.

  • Code(Text): 실행 코드
  • Data/BSS: 전역 변수, 정적 변수
  • Heap: 동적 할당 영역
  • Stack: 함수 호출 프레임
  • 그 밖의 자원: 열린 파일, 소켓, 시그널 설정, 권한 정보 등

스레드

스레드 구조

스레드는 다음 요소를 각각 독립적으로 가진다.

  • 프로그램 카운터(PC)
  • 레지스터 집합
  • 스택
  • 스레드별 로컬 저장소(TLS)

반면 같은 프로세스의 스레드끼리는 보통 다음을 공유한다.

  • 주소 공간(Code, Data, Heap, 메모리 매핑 영역)
  • 열린 파일과 소켓
  • 프로세스 수준 자원 대부분

멀티프로세스

여러 프로세스를 협력시키며 작업을 처리하는 방식

장점

  • 주소 공간이 분리되어 격리가 강함
  • 한 프로세스가 죽어도 다른 프로세스에 영향이 상대적으로 적음
  • 보안 경계 설정이 비교적 쉬움

단점

  • 프로세스 간 데이터 교환 시 IPC 비용이 듦
  • 주소 공간 전환이 필요한 context switch는 일반적으로 더 무거움

멀티스레드

하나의 프로세스 안에 여러 스레드를 두고 작업을 나누는 방식

장점

  • 같은 주소 공간을 공유하므로 데이터 교환이 빠름
  • 프로세스보다 생성/종료/전환 비용이 가벼운 편
  • 하나의 애플리케이션 안에서 병렬성을 얻기 좋음

단점

  • 공유 메모리 때문에 race condition이 생기기 쉬움
  • 한 스레드의 잘못된 메모리 접근이 프로세스 전체를 죽일 수 있음
  • 동기화가 잘못되면 데드락이나 성능 저하가 발생함

멀티스레드의 핵심 위험은 공유 상태(shared state)다. 따라서 실제 구현에서는 임계 구역을 최소화하고, 뮤텍스·세마포어·조건 변수·원자 연산 같은 동기화 도구를 사용해 안전성을 확보한다.