Java

프로세스와 쓰레드

KJihun 2023. 5. 29. 15:12
728x90
프로세스란, 프로세서(처리기, CPU)에 의해 처리되는 프로그램(실행중인 프로그램)을 의미한다.

OS가 프로그램 실행을 위한 프로세스를 할당할 때,

프로세스 안에 프로그램 Code Data, 메모리 영역(Stack, Heap)을 함께 할당해준다.

1. 코드(Code)는 프로그램의 명령어(Instructions)를 포함하는 영역이다.

  • 프로세스가 수행해야 할 특정 작업을 정의하며, Java main 메소드와 같은 코드를 의미한다

2. 데이터(Data)는 프로그램이 실행될 때 초기화되거나 할당되는 데이터들을 저장한다

  • 프로세스가 사용하는 변수(전역 변수, 정적(Static) 변수, 상수(Constants)) 등이 저장된다.

3. 메모리(Memory)는 데이터와 명령어를 저장하는 물리적인 공간이다.

프로세스 실행 중에 필요한 모든 정보가 메모리에 저장되며, stack과 heap 영역으로 나뉜다.

  • 스택(Stack)
    • 후입선출(LIFO) 방식으로 동작한다.
    • 지역 변수, 매개 변수, 함수 호출 및 반환과 같은 프로그램 실행에 필요한 작은 데이터를 저장하는 영역이다.
    • 자동으로 메모리를 할당하고 해제하므로 메모리 관리가 상대적으로 간단하다.
  • 힙(Heap)
    • 힙은 프로그램 실행 중에 동적으로 메모리를 할당하고 해제하는 데 사용된다.
    • 필요에 따라 크기가 동적으로 변경될 수 있으며, 할당된 메모리는 명시적으로 해제되기 전까지 사용된다.

 

프로세스의 상태 전이

 

  • Dispatch : 준비상태의 프로세스가 프로세서를 할당받아 실행상태로 전이되는 과정
  • Wake Up : 대기중인 프로세스에 입출력 작업이 완료되어 준비상태로 전이되는 과정
  • Timer runout : 프로세스가 시간을 초과하면 CPU를 다른 프로세스에게 양도하고, 자신은 준비 상태로 전이되는 것
  • Spooling : 입출력 데이터를 한꺼번에 처리하기 위해 디스크에 저장하는 과정
    • 다중프로그래밍 시스템과 비교해 상대적으로 느린 입출력장치의 처리속도를 보완, 성능을 향상시키기 위함
  • 교통량 제어기(Traffic Controller) : 프로세스 상태 조사와 통보를 담당

 

스레드(Thread)란, 프로세스가 할당받은 자원을 이용하는 실행의 단위를 나타낸다

스레드는 실행 요청이 들어오면 생성되며, 프로세스 안에 있는 메모리 공간을 공유받아 사용한다.

각각 고유한 스택(Stack)을 가지며 힙(Heap)을 공유하여 사용한다.

  • 스택은 각 스레드에게 독립적으로 할당되는 작은 크기의 메모리 공간으로, 임시 데이터와 지역 변수를 저장한다.
  • 힙은 동적으로 할당된 데이터를 저장하며 스레드 간에 공유하여 사용한다.

 

 

 

이미지 출처 : https://itwiki.kr/w/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%83%81%ED%83%9C

'Java' 카테고리의 다른 글

람다식을 이용한 멀티 쓰레드  (0) 2023.05.29
싱글 쓰레드와 멀티 쓰레드  (0) 2023.05.29
제네릭(Generic) 2  (0) 2023.05.26
제네릭(Generic)의 개념  (0) 2023.05.26
default 메서드, static 메서드  (0) 2023.05.26