프로세스
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
- 동적인 개념으로는 실행중인 프로그램
할당받는 시스템 자원
- CPU time
- Code, Data, Stack, Heap의 구조로 되어있는 독립적인 메모리 영역 (가상 메모리)
특징

- 각각 독립된 메모리 영역 (Code, Data, Stack, Heap의 구조)을 할당 받는다.
- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신 (IPC, inter-process communication)을 사용해야 한다.
- e.g.) OS의 파이프, 소켓 등을 이용한 통신 방법 이용
쓰레드
- 프로세스 내에서 실행되는 여러 흐름의 단위
특징

- 스레드는 프로세스 내에서 각각 stack 만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
- 스레드는 한 프로세스 내에서 동작하는 실행 흐름, 프로세스 내의 주소 공간이나 자원들(힙공간) 등을 같은 프로세스 내에서 스레드 끼리 공유하며 실행된다.
자바 스레드
- 일반 스레드와 거의 차이가 없으며, JVM 이 운영체제의 역할을 한다.
- 자바에는 프로세스가 존재하지 않고 스레드만 존재한다. (JVM 자체가 하나의 프로세스라는 의미)
- 자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다.
- 자바에는 스레드 스케줄링은 전적으로 JVM에 의해 이루어 진다.
- 모든 자바 앱은 하나 이상의 스레드를 포함한다.
- 기본적으로 메모리 관리(gc) 스레드 같은 시스템 스레드와 하나의 main 스레드가 실행된다.