JAVA

프로세스와 스레드

silver-w 2024. 10. 21. 21:01

"운영체제 안에 프로세스가 있고, 프로세스 안에 스레드가 있다."

프로그램 : 컴퓨터에서 어떤 작업을 실행할 수 있는 코드 덩어리

프로세스 : 운영체제 안에서 실행중인 프로그램

스레드 : 프로세스 내에서 실행되는 작업의 단위, 하나의 프로세스는 하나 이상의 스레드를 가지고 있다

 

1. Program


컴퓨터에서 어떤 작업을 위해 실핼할 수 있는 '정적인 상태'의 파일 (ex. exe 파일)

사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어의 집합

(=  어떤 작업을 하기 위해 해야할 일들을 순서대로 나열 = 코드 덩어리)

이에 필요한 데이터를 묶어 놓은 파일로 보조 기억장치에 저장되어있다.

2. Process (작업의 단위)


자바 언어로 비유하면 클래스는 프로그램, 인스턴스는 프로세스이다.

 

운영체제 안에서 실행중인 프로그램을 프로세스라고 한다.

실행 전 프로그램(단순 파일) → 실행 중 프로그램(인스턴스/프로세스가 생성된 상태) 

 

각 프로세스는 독립적인 메모리 공간을 가진다.

예를 들어 게임이 팅겨도 음악플레이어는 재생이 끊기지 않는 것 처럼 서로 다른 프로세스(서로 다른 인스턴스)는 영향을 미치지 않는다.

 

□ 프로세스의 메모리 구성은 자바 메모리 구성과 비슷하다. (

  • Code 섹션 : 실행할 프로그램의 코드가 저장된다, CPU에서 이 영역의 명령어를 하나씩 가져와 처리하게 된다.
  • Data 섹션 : 전역 변수 및 정적 변수가 저장되는 부분, 프로그램이 시작될 때 이 변수들이 할당되어 프로그램 종료시 소멸된다.
  • Heap 영역 :  동적으로 할당되는 메모리 영역. 메모리 주소 값에 의해서만 참조되고 사용되며, 런타임시 크기가 결정된다.
  • Stack 영역 : 자바의 스택과 같은 개념, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역.
    함수 호출 시 할당되고 함수 반환시 소멸된다.

(참고 - 자바 메모리 구조)

※ 자바 메모리 구조는 크게 Method / Heap / Stack로 나누어져 있다
 Method 영역 : 프로그램을 실행하는데 필요한 공통 데이터 관리 (클래스 정보, static 영역, 상수)
 Heap 영역 : 인스턴스와 배열이 생성되는 영역, GC가 동작하는 영역이다
 Stack 영역 : 메서드가 호출될때마다 stack frame이 생성되며, 메서드가 종료되면 해당 프레임은 없어진다.
                      (지역변수, 중간 연산 결과, 메서드 호출 정보 등을 포함한다)

3.Thread (실행 흐름의 단위)


스레드는 프로세스 내에서 실행되는 작업의 단위, 프로세스는 최소 하나 이상의 스레드를 포함한다.

자바코드를 실행할 때 짜여진 코드를 위에서 아래로 실행시킨다, 이때 실행하는 흐름을 스레드라고 한다. 

 

프로세스가 실행 환경과 자원을 제공하는 컨테이너 역할을 하고, 스레드는 CPU를 사용해서 코드를 하나하나 실행한다.

 

□ 스레드의 메모리 구성

   - 소속된 프로세스의 메모리를 공유받는다 (프로세스 안에 있는 메모리를 사용할 수 있다)

  • 공유 메모리 : 소속된 프로세스가 제공하는 메모리 
  • 개별 스택 : 각 스레드가 가지는 개별적인 메모리

□ 스레드의 갯수에 따른 종류 

    - 프로세스는 하나의 스레드를 무조건 포함한다 

  • 단일 스레드 : 한 프로세스 내 하나의 스레드 
  • 멀티 스레드 : 한 프로세스 내 두개 이상의 스레드 

 

멑티 스레드 예시 : 유투브에서 영상을 보면서 댓글을 다는 것 (스레드1: 영상보기, 스레드2: 댓글달기)

 

 

 


출처 : https://inf.run/NC7kS

 

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 강의 | 김영한 - 인프런

김영한 | 멀티스레드와 동시성을 기초부터 실무 레벨까지 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다?

www.inflearn.com