IT/Java

[JAVA] 프로세스와 스레드

binary? 2024. 6. 14. 12:54

프로세스(Process)와 스레드(Thread)는 운영체제에서 프로그램의 실행 단위를 의미합니다. 이 둘은 컴퓨터 프로그램의 실행 방식을 다르게 정의하며, 각각의 특징과 사용 목적이 다릅니다.

프로세스 (Process)

1. 정의:

  • 프로세스는 실행 중인 프로그램의 인스턴스입니다. 프로그램이 실행되면 운영체제로부터 메모리와 자원을 할당받아 독립된 실행 환경을 갖게 됩니다.

2. 특징

  • 독립적 메모리 공간: 각 프로세스는 독립된 주소 공간을 갖고, 다른 프로세스와 메모리를 공유하지 않습니다.
  • 자원 소유: 프로세스는 자신의 코드, 데이터, 파일 핸들, 프로세스 제어 블록(PCB) 등을 포함하는 자원을 소유합니다.
  • 안정성: 한 프로세스가 실패해도 다른 프로세스에 영향을 미치지 않습니다.
  • 컨텍스트 스위칭 비용: 프로세스 간 전환은 문맥 교환(Context Switching)이 필요하며, 이는 비교적 비용이 많이 듭니다.

3.사용 예:

  • 독립된 응용 프로그램 실행, 예를 들어 웹 브라우저, 텍스트 에디터 등.

스레드 (Thread)

1.정의:

  • 스레드는 프로세스 내에서 실행되는 단위입니다. 스레드는 동일한 프로세스 내에서 실행되며, 프로세스의 자원을 공유합니다.

2.특징:

  • 공유 메모리 공간: 같은 프로세스 내의 스레드들은 메모리 공간과 자원을 공유합니다. 이는 효율적인 자원 사용을 가능하게 합니다.
  • 경량성: 스레드는 프로세스보다 생성과 종료, 전환에 드는 비용이 적습니다.
  • 협력적 실행: 동일한 프로세스 내의 스레드들은 협력적으로 작업을 수행할 수 있습니다.
  • 동기화 문제: 자원을 공유하기 때문에 동기화 문제(경쟁 상태, 데드락 등)가 발생할 수 있습니다.

3.사용 예:

  • 하나의 응용 프로그램에서 여러 작업을 동시에 처리할 때, 예를 들어 웹 서버에서 다수의 클라이언트 요청 처리, GUI 응용 프로그램에서 사용자 입력 처리와 백그라운드 작업 병행 수행 등.

차이점 요약

특징
프로세스
스레드
기본 단위
실행 중인 프로그램 인스턴스
프로세스 내의 작업 단위
메모리
독립된 주소 공간
프로세스 내에서 메모리와 자원을 공유
생성 비용
높음 (컨텍스트 스위칭 비용도 높음)
낮음 (빠른 생성 및 컨텍스트 스위칭)
안전성
한 프로세스의 문제는 다른 프로세스에 영향을 주지 않음
한 스레드의 문제는 같은 프로세스 내 다른 스레드에 영향을 줄 수 있음
통신 방법
프로세스 간 통신(IPC)을 통해야 함
공유 메모리를 통해 통신 가능
사용 예
독립된 응용 프로그램 실행
응용 프로그램 내에서 병렬 작업 수행