프로세스란?
운영체제의 프로세스 스케줄러에 의해 컨틀롤을 배정받아 다른 프로세스와 비동기적으로 작동하는 실행 단위로의 다수의 루틴으로 구성되어 있습니다.
-> 단순하게 말해서 프로그램이 돌아가고 있는 상태를 말합니다.(작업 중인 프로그램)
참고 할당받는 시스템 자원의 예
- CPU 시간
- 운영되기 위해 필요한 주소 공간
- Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역
특징

- 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당 받습니다.
- 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있습니다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없습니다.
- 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을 사용해야 합니다.
스레드
어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 컴포넌트 실행 프레임워크는 스레드를 이용하여 내부에 등록된 컴포넌트를 실행시킨다.
-> 단순하게 말하면 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위를 말합니다.
![]()
특징

- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유합니다.
- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행됩니다.
- 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유합니다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 업습니다.
- 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있습니다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 아웃 스레드도 그 변경 결과를 즉시 볼 수 있습니다.
자바 스레드

- 메소드 영역 : 프로세스에 필요한 공통 데이터를 관리, 프로그램의 모든 영역에서 공유합니다.
- 클래스 정보 : 클래스의 실행 코드, 필드, 메소드와 생성자 코드 등 모든 실행 코드가 존재합니다.
- 스택 영역 : 자바 실행 시 하나의 실행 스택이 생성된 후 각 스택 프레임은 지역 변수, 중간 연산 결과, 메소드 호출 정보 등을 포함합니다.
- 스택 프레임 : 스택 영역에 쌓이는 네모 박스가 하나의 스택 프레임입니다. 메소드를 호출할 때 마다 하나의 스택 프레임이 쌓이고, 메소드가 종료되며 해당 스택 프레임이 제거된다.
- 힙 영역 : 객체와 배열이 생성된는 영역입니다. 가비지 컬렉션이 이루어지는 주요 영역이며, 더 이상 참조되지 않는 객체는 가비지 컬렉션에 의해 제거됩니다.
결론
프로세스와 스레드의 개념을 이해할 수 있었습니다. 프로세스 안에 스레드가 존재하고 스레드 안에는 메소드 영역, 힙 영역, 스택 영역이 있습니다. 각 영역의 기능과 자바에서의 동작 원리를 알 수 있게 되었습니다.
다음 블로그 작성에서는 스레드와 프로세스의 동작 원리를 깊숙히 더 공부해 볼 예정이며, 스레드의 자바에서의 동작 코드도 작성해보겠습니다.
참고 출처 :
[OS]프로세스와 스레드의 차이
완전히 정복하는 프로세스 vs 스레드 개념
프로세스와 스레드의 차이
김영한의 실전 자바 - 고급 1편