"운영체제 안에 프로세스가 있고, 프로세스 안에 스레드가 있다."
프로그램 : 컴퓨터에서 어떤 작업을 실행할 수 있는 코드 덩어리
프로세스 : 운영체제 안에서 실행중인 프로그램
스레드 : 프로세스 내에서 실행되는 작업의 단위, 하나의 프로세스는 하나 이상의 스레드를 가지고 있다
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: 댓글달기)
김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 강의 | 김영한 - 인프런
김영한 | 멀티스레드와 동시성을 기초부터 실무 레벨까지 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다?
www.inflearn.com
'JAVA' 카테고리의 다른 글
스레드 생성과 실행 - Runnable (0) | 2024.10.23 |
---|---|
스레드 생성과 실행 - 스레드 종류 (0) | 2024.10.23 |
Context switching와 스레드작업 종류(CPU-bound tasks, I/O-bound tasks) (0) | 2024.10.21 |
(스레드) Thread와 Scheduling (0) | 2024.10.21 |
(스레드) Multi-Tasking과 Multi-Process (0) | 2024.10.21 |