Process와 Thread

CorinBeom·2025년 5월 14일

CS

목록 보기
15/22
post-thumbnail

여러분, 프로세스와 스레드의 차이점, 확실히 알고 계신가요?
조금 헷갈렸던 분들을 위해, 쉽고 확실하게 정리해드리겠습니다!


Process란?

실행중인 프로그램을 의미한다. 운영체제가 프로그램을 실행할 때, 프로그램 코드, 데이터, 리소스를 포함한 독립적인 실행 단위를 생성하는데 이것이 바로 프로세스.

이렇게만 보면 도대체 무슨 말인지 감이 안 올 수도 있습니다.

윈도우 : 작업관리자
Mac : 활성 상태 보기
를 확인해보면

이런 식으로 나오는 것들이 프로세스라고 볼 수 있다.

Process의 주요 특징

  • 독립된 메모리 공간을 가짐 (Code, Data, Heap, Stack)
  • 하나의 프로세스가 종료되어도 다른 프로세스에 영향을 주지 않는다
  • 운영체제는 각 프로세스마다 PCB(Process Control Block)를 생성해 상태를 관리한다
  • 문맥교환(Context Switch) 시, 메모리 정보까지 복원하므로 비용이 크다.

예시 :

  • 위 사진처럼 VSCode(IDE), 노션, 크롬 같이 각각의 앱은 별도의 프로세스로 실행되는걸 확인할 수 있다 !

위의 프로세스의 주요 특징에서 언급한 PCB에 대해서 간단하게 설명하고 가겠다.


PCB (Process Control Block)

운영체제가 각각의 프로세스를 관리하기 위해 사용하는 자료구조. 즉, 프로세스의 '신분증'이자 '기록부' 같은 역할

PCB에는 어떤 정보들이 있을까?

  • PID : 프로세스 고유 번호

  • 프로세스 상태 : 실행 중, 준비 상태, 대기 상태 등

  • Program Counter : 다음에 실행할 명령어 주소

  • CPU 레지스터 정보 : 문맥 교환 시 저장되는 정보

  • 메모리 관리 정보 : 페이지 테이블, 메모리 범위 등

  • 파일 디스크립터 : 프로세스가 연 파일 목록

  • 우선순위 등 스케줄링 관련 정보

    같은 내용들이 들어있다.

왜 중요한가?

운영체제는 문맥 교환(Context Switching) 시, 현재 프로세스의 정보를 PCB에 저장하고, 새로 실행할 프로세스의 정보를 PCB에서 꺼내서 복원한다.
즉, PCB 덕분에 여러 프로세스를 번갈아가며 실행할 수 있는 것이다 !

🚨 만약 PCB가 없다면 ???

  1. A라는 프로그램(프로세스)이 실행 중. (예: 웹 브라우저)

  2. B라는 프로그램(예: 음악 플레이어)이 실행 요청을 보냄.

  3. 운영체제는 A의 실행을 잠시 멈추고 B로 전환해야 함.
    → 이게 문맥 교환(Context Switch).

  4. 그런데! PCB가 없다면?

  • 운영체제가 A의 정보(PID, 레지스터 상태, 다음 실행 명령 주소, 메모리 정보 등)를 기억해둘 수가 없다.

💥 즉, 다시 A를 실행할 수 없다 !

운영체제가 "어디까지 실행했는지", "어떤 데이터를 쓰고 있었는지" 아무것도 모르게 되는 것이다...

📖 현실적인 비유:

  • PCB 있음: 책갈피를 꽂고 책을 덮었다가, 다시 정확히 읽던 페이지부터 읽기 가능

  • PCB 없음: 책을 덮었는데 어디까지 읽었는지 기억 안 남 → 처음부터 다시 읽어야 함


Thread란?

프로세스 내부에서의 실행 단위. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이들은 코드, 데이터, 힙은 공유하고 스택은 독립적으로 가진다.

스레드의 주요 특징 :

  • 동일한 메모리 공간을 공유하며 실행
  • 문맥 교환이 빠름 (Register나 PC만 저장하면 됨)
  • 스레드 간 자원 공유가 쉬워 통신 비용이 낮음
  • 공유 자원 접근 시, 동기화(Synchronization) 필요함

예시 :

  • 웹 브라우저에서 탭마다 스레드가 분리되어 작동할 수 있음
  • 게임에서 렌더링, 사운드, 입력 처리를 각 스레드로 분리함

Process VS Thread

❓언제 프로세스를 사용하고 언제 스레드를 사용해야 할까?

상황 :

  • 독립적인 실행 단위, 오류 격리가 중요한 경우 : 프로세스

  • 빠른 통신, 데이터 공유가 중요한 경우 : 스레드

  • 멀티코어 활용, 병렬 처리가 필요한 경우 : 스레드 + 동기화


마무리

  • 프로세스는 무겁고 안전하며, 스레드는 가볍고 빠르지만 동기화의 부담이 있다

  • 실제로는 하나의 프로세스 안에 여러 스레드를 두어 동시성을 구현하는 방식이 일반적임 !

  • 이를 잘 이해하고 사용하는 것이 멀티 태스킹/멀티 스레딩 환경에서 성능과 안정성을 높이는 핵심 !
profile
Before Sunrise

0개의 댓글