9월 24일 - 프로세스와 스레드의 차이

Yullgiii·2024년 9월 24일
0

[CS] 프로세스와 스레드의 차이

프로세스와 스레드란?

  • 프로세스는 메모리 상에서 실행 중인 프로그램을 의미합니다. 프로세스는 고유한 주소 공간과 자원을 할당받아 독립적으로 실행됩니다.
  • 스레드는 프로세스 안에서 실행되는 실행 흐름의 단위를 말합니다. 프로세스 내에서 여러 스레드가 생성될 수 있으며, 스레드들은 프로세스의 자원들을 공유하며 실행됩니다.

프로세스는 각각 독립된 주소 공간을 갖고 있으며, code, data, heap, stack 영역으로 구성됩니다. 반면, 스레드는 이 중 stack만 별도로 할당받고 나머지 영역은 다른 스레드와 공유하게 됩니다.

요약

  • 프로세스: 고유한 주소 공간과 자원을 독립적으로 할당받아 사용하는 실행 단위.
  • 스레드: 같은 프로세스 내에서 다른 스레드와 자원을 공유하며 실행되는 실행 단위.

멀티 프로세스와 멀티 스레드 비교

멀티 스레드를 사용하는 이유

  1. 자원의 효율적 관리: 프로세스를 생성할 때 필요한 시스템 호출(system call) 수가 줄어들어 자원을 더 효율적으로 관리할 수 있습니다.
  2. 낮은 통신 비용: 프로세스 간 통신(IPC: Inter-Process Communication)보다 스레드 간의 통신 비용이 적습니다. 덕분에 작업 간의 부담이 감소합니다.
  3. 빠른 컨텍스트 스위칭: 스레드는 같은 프로세스 내에서 실행되기 때문에 컨텍스트 스위칭이 빠르며, 이는 멀티 프로세스보다 성능 향상에 유리합니다.

주의할 점

  • 동기화 이슈: 스레드 간 자원 공유로 인해 동기화 문제가 발생할 수 있습니다. 이는 데드락, 레이스 컨디션 등의 문제를 유발할 수 있으므로 주의가 필요합니다.
  • 오버헤드 감소: 멀티 스레드는 멀티 프로세스보다 상대적으로 적은 메모리와 리소스를 소모합니다.

예제 코드 (Java)

아래 예제에서는 멀티 프로세스를 활용하는 방식과 멀티 스레드를 활용하는 방식을 비교합니다.

멀티 프로세스 예제

public class MultiProcessExample {
    public static void main(String[] args) {
        try {
            // 새로운 프로세스를 생성
            ProcessBuilder pb = new ProcessBuilder("java", "-cp", ".", "WorkerProcess");
            Process process = pb.start();
            System.out.println("새로운 프로세스가 실행되었습니다.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class WorkerProcess {
    public static void main(String[] args) {
        System.out.println("작업 프로세스 실행 중...");
    }
}

멀티 스레드 예제

public class MultiThreadExample {
    public static void main(String[] args) {
        Thread workerThread = new Thread(new WorkerThread());
        workerThread.start();
        System.out.println("새로운 스레드가 실행되었습니다.");
    }
}

class WorkerThread implements Runnable {
    @Override
    public void run() {
        System.out.println("작업 스레드 실행 중...");
    }
}

So...

멀티 스레드를 사용하면 프로세스 생성의 오버헤드를 줄이고, 스레드 간 통신 비용을 낮출 수 있어 시스템 성능을 효율적으로 관리할 수 있습니다. 다만, 공유 자원 관리와 동기화에 신경 써야 하며, 멀티 스레드의 특성을 잘 이해하고 사용해야 안정적인 프로그램을 개발할 수 있습니다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글