Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)에서 프로세스와 스레드의 차이점 완벽 정리

자바(Java)를 포함한 모든 운영체제 환경에서 프로세스(Process)스레드(Thread)는 프로그램이 실행되는 기본 단위라는 점에서 밀접한 관련이 있지만, 자원 사용 방식과 동작 구조에서 큰 차이를 보입니다. 이 글에서는 두 개념의 차이점을 항목별로 정리하고, 마지막에 비교표까지 제공하여 한눈에 이해할 수 있도록 구성했습니다.

프로세스(Process)란?

프로세스란 실행 중인 프로그램을 의미합니다. 운영체제로부터 독립된 메모리 공간을 할당받아 동작하며, 하나의 프로세스는 다른 프로세스와 분리된 환경에서 실행됩니다.

  • 프로그램이 실행된 상태, 즉 실행 중인 프로그램의 인스턴스를 가리킵니다.
  • 프로세스를 생성하는 데 상대적으로 많은 시간이 소요됩니다.
  • 프로세스를 종료하는 데에도 더 많은 시간이 걸립니다.
  • 컨텍스트 전환(Context Switching)에 많은 시간이 필요합니다.
  • 시스템 자원(CPU, 메모리 등)을 더 많이 소비합니다.
  • 프로세스 간 통신(IPC)은 별도의 메커니즘이 필요하기 때문에 통신 효율이 낮습니다.
  • 각 프로세스는 독립적이고 고립된(Isolated) 특성을 가지며, 한 프로세스의 오류가 다른 프로세스에 직접 영향을 주지 않습니다.
  • 무거운 프로세스(Heavy-weight Process)라고도 불립니다.
  • 한 프로세스에서 다른 프로세스로 전환할 때는 운영체제의 인터페이스(시스템 호출)를 거쳐야 합니다.
  • 서버 환경에서 하나의 프로세스가 블록(Block)되면, 해당 프로세스가 해제되기 전까지 다른 서버 프로세스를 실행할 수 없습니다.
  • 자신만의 PCB(Process Control Block), 스택(Stack), 그리고 독립적인 주소 공간(Address Space)을 가집니다.

스레드(Thread)란?

스레드는 프로세스 내부에서 실행되는 작업의 흐름, 즉 프로세스의 세그먼트입니다. 하나의 프로세스 안에서 여러 스레드가 메모리와 자원을 공유하며 동시에 작업을 수행할 수 있습니다.

  • 프로세스를 구성하는 실행 단위, 즉 프로세스의 일부(Segment)를 가리킵니다.
  • 스레드 생성에는 적은 시간이 소요됩니다.
  • 종료 역시 빠르게 처리됩니다.
  • 컨텍스트 전환 속도가 빠르고 부담이 적습니다.
  • 시스템 자원을 적게 소비합니다.
  • 같은 프로세스에 속한 스레드들은 코드, 데이터, 힙 영역 등 메모리를 공유합니다.
  • 가벼운 프로세스(Light-weight Process)라고도 불립니다.
  • 메모리를 공유하기 때문에 프로세스 간 통신보다 통신 효율이 훨씬 높습니다.
  • 스레드 간 전환은 운영체제를 호출할 필요가 없어 오버헤드가 적습니다.
  • 커널(Kernel)을 인터럽트하지 않습니다.
  • 서버 환경에서 한 스레드가 블록되어도, 다른 스레드가 동일한 작업을 계속 수행할 수 있어 응답성이 뛰어납니다.
  • 부모 프로세스의 PCB를 사용합니다.
  • 자신만의 TCB(Thread Control Block)와 스택을 가지지만, 주소 공간은 부모 프로세스와 공유(Common Address Space)합니다.

프로세스 vs 스레드 비교 요약

구분 기준프로세스(Process)스레드(Thread)
정의실행 중인 프로그램프로세스 내의 실행 단위
생성·종료 시간오래 걸림짧음
컨텍스트 전환느리고 비용이 큼빠르고 비용이 적음
자원 소비많음적음
메모리독립된 주소 공간주소 공간 공유
통신 효율낮음 (IPC 필요)높음 (공유 메모리 활용)
블록 시 영향다른 프로세스 실행 지연 가능다른 스레드가 작업 계속 가능
제어 블록자체 PCB 보유부모의 PCB + 자체 TCB 사용
별칭Heavy-weight ProcessLight-weight Process

마무리

정리하면, 프로세스는 독립성과 안정성이 강점인 반면 자원 소비와 전환 비용이 크고, 스레드는 속도와 효율성이 강점이지만 메모리를 공유하기 때문에 동기화(Synchronization) 문제에 대한 주의가 필요합니다. 따라서 작업의 성격에 따라 멀티프로세스 방식과 멀티스레드 방식 중 적절한 것을 선택하는 것이 중요합니다.