Programming/JAVA
💡 프로그램 vs 프로세스 vs 스레드 완전 정리 (자바 스레드 포함)
추천캐릭터
2022. 10. 29. 11:52
728x90
반응형
📌 목차
- 프로그램이란?
- 프로세스란?
- 스레드란?
- 자바 스레드의 개념
- 스레드 사용 시 주의사항
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
반응형