ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS] 프로세스(Process)와 스레드(Thread)의 차이
    CS 2025. 1. 20. 01:48

    프로세스(Process)

    • 운영체제가 관리하는 프로그램의 실행 단위.
    • 실행 중인 프로그램은 독립된 메모리 공간(Code, Data, Heap, Stack 등)를 가짐.
    • 하나의 프로세스는 여러 개의 스레드를 포함할 수 있음.

     

    프로세스의 특징

    1. 독립적인 실행 환경을 가짐 → 한 프로세스가 종료되어도 다른 프로세스에는 영향 없음.
    2. CPU 스케줄링을 통해 실행됨.
    3. 프로세스 간 데이터 공유가 어렵고, IPC(Inter-Process Communication)를 사용해야 함.
    4. 문제가 발생하면 개별 프로세스만 영향을 받음.
    1. 크롬(Chrome)을 실행하면 하나의 프로세스가 실행됨.
    2. 크롬에서 여러 개의 탭을 열면, 각각의 탭이 개별 프로세스로 실행됨.
    3. 한 탭이 충돌해도 다른 탭에는 영향을 미치지 않음 (Sandboxing).

     

    📌 프로세스의 메모리 구조

    • Code 영역: 실행 코드 저장
    • Data 영역: 전역 변수 저장
    • Heap 영역: 동적 할당된 메모리
    • Stack 영역: 함수 호출 스택, 지역 변수 저장 (각 스레드는 독립적인 Stack을 가짐)
    [ 프로세스 메모리 구조 ]
    --------------------------------------
    | Code (코드 영역)                   |
    --------------------------------------
    | Data (데이터 영역, 전역 변수)       |
    --------------------------------------
    | Heap (동적 할당 메모리)             |
    --------------------------------------
    | Stack  (스레드 1)                  |
    | Stack  (스레드 2)                  |
    | Stack  (스레드 3)                  |
    --------------------------------------

     

    프로세스 기반 예제 (크롬 브라우저)

    • 크롬 브라우저는 각 탭을 별도의 프로세스로 실행.
    • 한 탭이 충돌해도 다른 탭에는 영향 없음.
    [크롬 프로세스 구조]
    --------------------------------------
    | Chrome.exe (프로세스 1 - 메인)     |
    --------------------------------------
    | Chrome.exe (프로세스 2 - 탭 1)     |
    --------------------------------------
    | Chrome.exe (프로세스 3 - 탭 2)     |
    --------------------------------------

     

     

     

    스레드(Thread)

    • 프로세스 내부에서 실행되는 작은 실행 단위.
    • 같은 프로세스의 스레드는 Code, Heap, Data 영역을 공유하며, 각자 독립적인 Stack을 가짐.
    • 멀티스레딩(Multithreading)을 사용하면 하나의 프로세스에서 여러 작업을 병렬로 수행할 수 있음.

     

    스레드의 특징

    1. 같은 프로세스 내에서 실행되며, Code, Heap, Data를 공유.
    2. 새로운 스레드를 생성하는 비용이 프로세스보다 적음.
    3. Context Switching이 빠름 (프로세스보다 가벼움).
    4. 동기화 문제가 발생할 수 있음 (공유된 자원에 여러 스레드가 접근하므로 Race Condition, Deadlock 등의 문제가 발생할 수 있음).
    1. MS Word에서 문서를 편집하면서 자동 저장이 실행됨 (편집 스레드 + 저장 스레드).
    2. 크롬에서 동영상을 재생하면서, 동시에 다운로드가 진행됨 (재생 스레드 + 다운로드 스레드).
    3. 게임에서 그래픽 처리와 물리 연산이 동시에 수행됨.

     

     

    📌 스레드의 메모리 구조

    • 같은 프로세스 내에서는 Code, Data, Heap 영역을 공유하지만, 각 스레드는 독립적인 Stack을 가짐.
    • 따라서 전역 변수는 스레드 간 공유되지만, 지역 변수는 공유되지 않음.

     

    스레드 기반 예제 (게임 엔진)

    • Unreal Engine이나 Unity는 렌더링, 물리 연산, 네트워크 통신을 각각 스레드로 처리.
    • 게임이 멈추지 않고 여러 작업을 동시에 수행 가능.
    [게임 엔진의 멀티스레딩 구조]
    --------------------------------------
    | 메인 스레드 (Game Logic)          |
    --------------------------------------
    | 렌더링 스레드 (Graphics)           |
    --------------------------------------
    | 물리 연산 스레드 (Physics)         |
    --------------------------------------
    | AI 스레드 (AI 처리)                |
    --------------------------------------

     

     

    추가) 스레드가 프로세스를 완전히 대체할 수 없는 이유?

    🚀 스레드는 가볍고 빠르지만, 프로세스를 대체할 수 없는 이유
    1️⃣ 독립적인 실행 환경을 제공하지 못함 → 한 스레드가 죽으면 전체 프로세스가 죽을 수 있음
    2️⃣ 메모리 보호 기능이 부족함 → 하나의 스레드가 잘못된 메모리 접근을 하면 전체 프로세스에 영향을 줌
    3️⃣ 충돌이 발생하면 전체 프로세스가 영향을 받음
    4️⃣ 멀티코어 CPU 활용이 제한됨 → 프로세스는 여러 개의 CPU 코어를 더 효과적으로 사용할 수 있음
    5️⃣ 보안에 취약함 → 하나의 스레드가 해킹되면 전체 프로세스가 위험해질 수 있음
    6️⃣ 프로세스 간 통신(IPC)이 필요한 경우 → 네트워크 분산 시스템에서는 프로세스가 필수적

    'CS' 카테고리의 다른 글

    [CS] DLL(Dynamic Link Library)  (0) 2025.01.20
    [CS] 배치 작업 처리  (0) 2023.05.12
    [CS] 나만의 간단한 프레임워크 설계 방법  (0) 2023.05.10
    [CS] Unmanaged Language VS Managed Language  (0) 2023.05.08
    [CS] 공통 코드  (0) 2023.05.08
Designed by Tistory.