Waylog Blog

프로세스(Process) vs 스레드(Thread): OS의 실행 단위

CS

면접 단골 질문 1위입니다. "프로세스와 스레드의 차이가 뭔가요?" 단순히 "프로세스는 프로그램이고 스레드는 그 안의 작업 단위"라고 대답하면 50점입니다. 메모리 구조와 운영체제의 스케줄링 관점에서 깊이 있게 파고들어 봅시다.

1. 프로세스 (Process)

실행 중인 프로그램입니다. 운영체제로부터 시스템 자원을 할당받는 작업의 단위입니다.

  • 메모리 구조: 각 프로세스는 독립적인 메모리 영역(Code, Data, Stack, Heap)을 가집니다.
  • 격리성: 한 프로세스가 죽어도 다른 프로세스에 영향을 주지 않습니다. (크롬 탭 하나가 멈춰도 브라우저 전체가 꺼지지 않는 이유)
  • 통신 비용: 프로세스끼리 통신하려면 IPC(Inter-Process Communication)라는 복잡한 통신 방법을 써야 합니다.

2. 스레드 (Thread)

프로세스 내에서 실행되는 흐름의 단위입니다.

  • 메모리 공유: 스레드끼리는 Stack만 따로 쓰고, Code, Data, Heap 영역은 공유합니다.
  • 가벼움: 메모리를 공유하므로 생성 및 종료 비용이 적고, 스레드 간 전환(Context Switching) 속도가 빠릅니다.
  • 위험성: 하나의 스레드가 메모리를 잘못 건드리면 프로세스 전체가 죽어버릴 수 있습니다. 동기화 문제(Synchronization Issue)가 발생하기 쉽습니다.

3. 멀티 프로세스 vs 멀티 스레드

  • 멀티 프로세스: 안정성이 중요할 때 씁니다. 문맥 교환 비용이 큽니다.
  • 멀티 스레드: 효율성이 중요할 때 씁니다. 자원 공유가 쉬우나, 프로그래밍 난이도가 높습니다(데드락, 경쟁 상태 주의).

결론적으로, 운영체제는 프로세스에게 자원을 주고, 프로세스는 그 자원을 스레드끼리 나눠 쓰게 합니다.