25.01.08 TIL 프로세스와 스레드

신성훈·2025년 1월 8일
0

TIL

목록 보기
115/162

1. 프로세스란?

프로세스는 실행 중인 프로그램을 의미합니다.
운영체제가 프로그램을 실행하면 메모리(코드, 데이터, 스택 등)를 할당받아 독립적으로 실행됩니다.

특징

  • 독립적인 실행 단위
  • 운영체제에서 자원을 할당받아 실행
  • 프로세스 간 메모리 영역은 분리되어 있음
  • 프로세스 간 통신(IPC: Inter-Process Communication)을 통해 데이터 교환 가능

2. 스레드란?

스레드는 프로세스 내에서 실행되는 작업의 최소 단위입니다.
프로세스는 하나 이상의 스레드를 가질 수 있으며, 같은 메모리 공간을 공유합니다.

특징

  • 같은 프로세스 내에서 실행
  • 메모리 공간(Code, Data, Heap)을 공유
  • 독립된 스택(Stack)과 레지스터를 가짐
  • 가벼운 실행 단위로, 프로세스보다 생성/종료 비용이 낮음

3. 프로세스와 스레드 비교

특징프로세스스레드
정의실행 중인 프로그램프로세스 내 작업 실행 단위
메모리독립적 메모리 공간메모리 공간 공유(Code, Data, Heap)
자원 할당운영체제에서 별도 자원 할당프로세스의 자원을 공유
속도생성/종료 속도가 느림생성/종료 속도가 빠름
통신 방법IPC (파이프, 소켓, 공유 메모리 등) 사용같은 메모리 공간으로 빠른 데이터 공유

4. 프로세스와 스레드의 관계

  • 멀티프로세스: 여러 개의 프로세스를 병렬로 실행

    • 프로세스 간 자원 공유가 어려움
    • 독립적인 실행으로 하나의 프로세스가 오류가 나도 다른 프로세스에 영향을 미치지 않음
  • 멀티스레드: 하나의 프로세스에서 여러 스레드를 병렬로 실행

    • 자원을 공유하므로 효율적.
    • 스레드 중 하나가 오류가 나면 프로세스 전체가 영향을 받을 수 있음

5. 스레드 예시

스레드 생성

  1. Thread 클래스 상속
class MyThread extends Thread {
    public void run() {
        System.out.println("Thread is running...");
    }
}

public class ThreadExample {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}
  1. Runnable 인터페이스 구현
class MyRunnable implements Runnable {
    public void run() {
        System.out.println("Runnable thread is running...");
    }
}

public class RunnableExample {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();
    }
}

6. 마무리

프로세스와 스레드의 차이를 이해하면서, 자원 공유와 병렬 처리의 중요성을 알게 되었습니다. 특히 Java에서 멀티스레드를 구현해 보며 효율적 자원 활용의 장점을 느낄 수 있었습니다. 하지만 스레드 간 동기화 문제를 해결하지 않으면 데이터 충돌이 발생할 수 있다는 점에서 동시성 제어의 필요성도 깨달았습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글