728x90
반응형

📌 목차

  1. 프로그램이란?
  2. 프로세스란?
  3. 스레드란?
  4. 자바 스레드의 개념
  5. 스레드 사용 시 주의사항

1. 프로그램 (Program)

  • 사전적 의미: 어떤 작업을 위해 실행 가능한 파일
  • .exe, .jar, .py 등 사용자가 실행시킬 수 있는 상태
  • 아직 메모리에 올라가지 않은 정적인 상태

2. 프로세스 (Process)

메모리에 적재되어 실행되고 있는 프로그램의 인스턴스

✅ 정의

  • 운영체제로부터 CPU 시간, 메모리 등 시스템 자원을 할당받은 실행 단위
  • 하나의 독립된 개체로서 **자신만의 주소 공간과 메모리 구조(Code/Data/Stack/Heap)**를 가짐

✅ 주요 특징

  • 프로세스는 독립된 주소 공간을 사용
  • 기본적으로 프로세스마다 1개 이상의 스레드 포함
  • 다른 프로세스와 자원 공유 ❌ (단, IPC(Inter-Process Communication) 이용 가능)
🧱 프로세스 메모리 구조
┌────────┐
│  Code  │ ← 실행 코드
│  Data  │ ← 정적 변수
│  Heap  │ ← 동적 할당 객체
│  Stack │ ← 함수 호출/지역변수 (스레드별)
└────────┘

 


3. 스레드 (Thread)

프로세스 내부에서 실행되는 흐름의 최소 단위

✅ 정의

  • 하나의 프로세스 내에서 여러 작업을 동시에 처리할 수 있는 실행 흐름
  • 프로세스의 **자원(Code/Data/Heap)**을 공유하지만,
    스택(Stack)과 레지스터는 스레드별로 독립적

✅ 주요 특징

  • 스레드는 **경량 프로세스(Lightweight Process)**라고 불림
  • 같은 프로세스 내 스레드 간에는 메모리 공유 → 속도 빠름, 통신 쉬움
  • 메모리 공유로 인한 경합 조건(race condition) 발생 가능성 있음
 
📌 스레드는 같은 Heap 공유
⟶ 스택은 독립, 힙은 공유

 


4. 자바 스레드 (Java Thread)

✅ 자바 스레드 개요

  • JVM이 운영체제처럼 스레드를 관리
  • 자바는 프로세스 개념 없음, 오직 스레드만 있음
  • JVM 내부에서 스레드는 다음을 관리:
    • 총 스레드 수
    • 각 스레드의 메모리 주소
    • 스레드 상태 (NEW, RUNNABLE, BLOCKED 등)
    • 우선순위

✅ 자바 스레드의 실행 흐름 예시

public class MyThread extends Thread {
    public void run() {
        System.out.println("스레드 실행 중!");
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start(); // JVM에 실행 요청
    }
}

5. 스레드 사용 시 주의사항

⚠️ 동기화 문제(Synchronization)

  • 멀티 스레드 환경에서는 같은 자원에 동시 접근하면 충돌 가능
  • 이를 방지하기 위해 동기화(synchronized) 키워드 사용
  • 예시:
synchronized void increaseCounter() {
    counter++;
}
728x90
반응형

+ Recent posts