카테고리 없음

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

블로그닠네임 2025. 8. 24. 18:44
반응형

1. 프로세스(Process)란?

프로세스는 **"메모리 상에서 실행 중인 프로그램"**을 의미합니다.  우리가 컴퓨터에서 워드, 웹 브라우저, 게임 등 하나의 프로그램을 실행하면, 그 프로그램은 하나의 독립적인 프로세스가 됩니다. 프로세스는 운영체제로부터 독립적인 메모리 공간(코드, 데이터, 힙, 스택 영역)을 할당받으며, 이 공간을 다른 프로세스와 공유하지 않습니다. 따라서 하나의 프로세스는 다른 프로세스에 영향을 주지 않고 독립적으로 실행될 수 있습니다.

2. 스레드(Thread)란?

스레드는 **"프로세스 내에서 실행되는 작업의 흐름 단위"**를 의미합니다.  하나의 프로세스는 하나 이상의 스레드를 가질 수 있습니다. 프로세스가 애플리케이션의 '큰 작업 단위'라면, 스레드는 그 큰 작업 단위 내에서 실제로 CPU를 사용하여 코드를 실행하는 '작은 작업 단위'라고 볼 수 있습니다. 같은 프로세스 내의 스레드들은 해당 프로세스가 할당받은 메모리 공간과 자원(코드, 데이터, 힙 영역)을 공유하며 실행됩니다. 단, 스택 영역은 스레드마다 독립적으로 가집니다.

3. 프로세스와 스레드의 주요 차이점

구분프로세스(Process)스레드(Thread)

메모리 공간 독립적인 메모리 공간 할당 같은 프로세스 내에서 메모리 공간 공유 (스택은 개별)
자원 공유 자원을 공유하지 않음 (IPC를 통해 통신) 프로세스의 자원을 공유
생성/종료 시간 생성 및 종료 시간이 오래 걸림 생성 및 종료 시간이 짧음
컨텍스트 스위칭 오버헤드가 큼 (캐시 메모리 초기화 등 무거운 작업 동반)  오버헤드가 작음
통신 방법 프로세스 간 통신(IPC) 필요 (복잡)  스레드 간 직접 통신 가능 (공유 메모리 이용, 간단)
결함 영향 한 프로세스의 문제가 다른 프로세스에 영향 X 한 스레드의 문제가 프로세스 전체에 영향 줄 수 있음

4. 차이점에 대한 상세 설명

  • 메모리 및 자원 공유:
    • 프로세스: 각각의 프로세스는 독립적인 메모리 공간을 가집니다. 이는 한 프로세스의 오류가 다른 프로세스에 영향을 주지 않는다는 장점(Fault Isolation)을 제공하지만, 프로세스 간에 데이터를 주고받으려면 별도의 복잡한 통신 메커니즘(IPC: Inter-Process Communication)이 필요합니다. 
    • 스레드: 동일한 프로세스 내의 스레드들은 프로세스가 할당받은 코드, 데이터, 힙 영역을 공유합니다. 이를 통해 스레드 간 데이터 공유가 훨씬 용이하고 통신 비용이 적게 듭니다. 그러나 공유 자원에 대한 동기화 문제(Race Condition)가 발생할 수 있어, 이에 대한 적절한 처리가 필요합니다. 스레드마다 고유의 스택을 가짐으로써 독립적인 함수 호출과 지역 변수 관리가 가능합니다.
  • 컨텍스트 스위칭(Context Switching) 오버헤드:
    • 프로세스: CPU가 여러 프로세스를 번갈아 처리할 때, 현재 실행 중인 프로세스의 상태(Context)를 저장하고 다음 프로세스의 상태를 복구하는 과정을 컨텍스트 스위칭이라고 합니다. 프로세스 간 컨텍스트 스위칭은 독립적인 메모리 공간 때문에 캐시 메모리 초기화 등 무거운 작업이 동반되어 많은 시간이 소모되는 오버헤드가 발생합니다. 
    • 스레드: 스레드 간 컨텍스트 스위칭은 같은 프로세스 내에서 메모리를 공유하므로, 프로세스 간 스위칭보다 훨씬 가볍고 빠릅니다. CPU 레지스터만 저장하고 복구하는 수준으로 처리되는 경우가 많아 오버헤드가 적습니다.
  • 생성 및 종료 비용:
    • 프로세스는 운영체제로부터 독립적인 자원을 할당받고 해제하는 과정이 필요하므로 생성 및 종료 비용이 많이 듭니다.
    • 스레드는 이미 프로세스 내에서 자원을 공유하므로, 프로세스를 새로 만드는 것보다 스레드를 생성하고 제거하는 것이 훨씬 빠르고 효율적입니다.

5. 멀티프로세싱 vs 멀티스레딩

  • 멀티프로세싱(Multi-processing): 여러 개의 독립적인 프로세스를 동시에 실행하는 것을 의미합니다. 안정성이 중요한 시스템(예: 웹 서버, 운영체제)에서 주로 사용되며, 한 프로세스에 문제가 생겨도 다른 프로세스에는 영향을 주지 않습니다.
  • 멀티스레딩(Multi-threading): 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 것을 의미합니다. 자원을 효율적으로 사용하고 처리율을 높이는 데 유리하여, 게임, 워드 프로세서와 같이 응답성이 중요한 애플리케이션에서 주로 사용됩니다.
반응형