블로그 이름

[OS] 프로세스와 스레드의 차이 본문

개발/기타

[OS] 프로세스와 스레드의 차이

Hide 2025. 4. 9. 00:51

프로세스(Process)와 스레드(Thread)의 개념과 차이점

운영체제에서 프로그램이 실행될 때 어떤 단위로 실행되고 관리되는지 이해하는 것은 중요하다. 이때 자주 등장하는 두 개념이 프로세스스레드이다.

 

프로그램이란?

파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태를 말한다.

  • 프로세스와 스레드 이전에 프로그램이 무엇인지에 대해 확인해보면, 프로그램의 정의를 확인하고 가야한다.
  • 메모리에 올라가 있지 않은, 즉 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해 주지 않은 (프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해줘야 실행 가능), 정적인 상태 (미실행 중) 인 윈도우의 .exe 파일이나 macos의 .dmg 파일 등 사용자가 눌러 실행하기 전의 파일을 말한다. 쉽게 말해 코드 덩어리이다.
  • 해당 실행파일로 프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되고, 이 상태를 동적인 상태라고 하여 해당 상태의 프로그램을 프로세스라고 한다. 따라서 그냥 실행되고 있는 컴퓨터 프로그램이다.

프로세스(Process)란?

실행 중인 프로그램을 의미하며, 컴퓨터 자원(CPU 시간, 메모리, 파일 등)을 할당받아 독립적으로 실행되는 단위이다.

  • 하나의 프로세스는 독립적인 메모리 공간을 가지며, 최소한 하나의 스레드를 포함한다.
  • 운영체제는 각 프로세스를 분리하여 관리함으로써 보안성과 안정성을 보장한다.
  • 과거에 프로그램 실행 시 실행 시작부터 끝까지 프로세스 하나만을 사용하여 진행하였지만, 프로그램이 복잡해지며 프로세스 하나만을 사용하기엔 복잡해졌다. 한 프로그램을 처리하기 위한 프로세스를 여러개 만들 수는 없고 (운영체제는 안전성을 위해 프로세스마다 할당된 메모리 내 정보만 접근 할 수 있도록 제약을 두고 있다) 프로세스보다 더 작은 실행 단위 개념이 필요하여 만든 것이 다음의 스레드이다.

스레드(Thread)란?

프로세스 내에서 실제 작업을 수행하는 실행 흐름,
하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이를 멀티스레드(Multithreading)라고 한다.

  • 위 프로세스 특성의 한계를 해결하기 위해 만들어진 개념으로, 스레드 간 메모리를 공유하며 작동한다. 같은 프로세스 내 스레드들은 메모리(코드, 힙, 전역 변수 등)를 공유한다.
  • 스레드는 프로세스보다 생성, 종료, 전환 비용이 적다.
  • 예시로는 한 게임 클라이언트에서 그래픽 처리 스레드, 사운드 출력 스레드, 네트워크 통신 스레드 등, 한 프로세스 내에서 여러 스레드가 동시에 실행될 수 있다.

 

프로세스와 스레드의 작동 방식에 대한 더 자세한 설명

프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는다.

이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을 Code/Data/Stack/Heap 의 형식으로 할당해준다.

각각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.

이 때 스레드는 프로세스가 할당받은 메모리 영역 내에서 stack 영역은 따로 할당받고, 나머지 code/data/heap 형식의 메모리 영역을 공유한다.

따라서 각각의 스레드는 별도의 스택을 가지고 힙 메모리를 서로 읽고 쓸 수 있게 된다.

여기서 한 프로세스를 실행하다가 오류 발생하여 프로세스가 강제 종료된다면 타 프로세스에 아무런 영향을 주지 않는다. 

하지만 스레드의 경우는 code/data/heap 영역을 공유하기 때문에 스레드에서 오류 발생 시 동일 프로세스 내 타 스레드가 강제 종료된다. 

스레드는 정확히 CPU에서 최소작업단위가 되는데, CPU는 작업 처리 시 스레드를 최소 단위로 삼고 작업한다. 반면 운영체제는 프로세스가 최소 작업 단위가 된다.

여기서 중요한 점은 하나의 프로세스는 하나 이상의 스레드를 가진다는 점이다. 운영체제 관점에서는 프로세스가 최소 작업 단위인데, 이 때문에 같은 프로세스 소속의 스레드끼리 메모리를 공유하지 않을 수 없다.

 

프로세스와 스레드의 차이점

스레드는 프로세스 안에 포함되어 있고, 

운영체제는 프로세스에게 Code/Data/Stack/Heap 메모리 영역을 할당해주고, 최소작업단위로 삼으며 스레드는 프로세스 내에서 Stack 메모리 영역을 제외한 다른 메모리 영역을 프로세스 내 타 스레드와 공유한다.

프로세스는 타 프로세스와 정보 공유 시 IPC를 사용하는 등 번거로운 과정을 거쳐야 하지만 스레드는 기본 구조 자체가 메모리를 공유하는 구조이기 때문에 타 스레드와 정보 공유가 쉽다.

 

오늘은 프로세스와 스레드의 개념 및 차이점에 대해 알아보았다.