프로세스(Process)란?
컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램(실행할 수 있는 파일)을 뜻합니다.
- 프로그램을 실행하면, 실행에 필요한 내용이 RAM에 적재(인스턴스 생성)됩니다.
운영체제로 부터 시스템 자원을 할당받는 작업의 단위입니다.
- CPU 시간
- 운영되기 위해 필요한 주소 공간
- 독립된 메모리 영역
프로세스의 특징
- 프로세스는 각각 (Code, Data, Stack, Heap 구조로 이루어진) 독립된 메모리 영역을 할당 받습니다.
- Code: 실행할 프로그램의 코드가 저장되는 영역
- Data: 전역변수, 초기화된 데이터가 저장되는 영역
- Stack: 임시데이터(지역변수, 매개변수, 리턴값 등)가 저장되는 영역
- Heap: 필요에 의해 동적으로 메모리를 할당 할 때 사용하는 동적 데이터 영역
- 각 프로세스는 별도의 주소 공간에서 실행되며, 프로세스 간에 메모리 공간을 공유할 수 없습니다.
- 다른 프로세스 자원에 접근하려면 프로세스 간에 통신(IPC)이 필요합니다.
- 프로세스는 최소 하나 이상의 스레드(메인스레드)를 포함합니다.

스레드(Thread)란?
프로세스가 할당 받은 자원(CPU 시간, 주소 공간, 메모리 영역)을 이용하는 실행 단위입니다.
스레드의 특징
- 스레드는 프로세스 내에서 Stack만 따로 할당 받고 Code, Data, Heap 영역은 공유합니다.
- 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내 스레드 간 공유하면서 실행 합니다.
- 스레드는 메모리를 공유하기 때문에 동기화, 데드락 등의 문제가 발생할 수 있습니다.
- 한 스레드가 프로세스 자원을 변경하면, (자원이 공유되므로) 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있습니다.

프로세스(Process)와 스레드(Thread)가 헷갈린다면
프로세스는
- 프로세스 간 자원을 공유하지 않습니다.
- 다른 프로세스 자원에 접근하려면 통신이 필요합니다.
스레드는
- 프로세스 내에서는 스레드 간 자원을 공유합니다.
- 프로세스의 실행단위입니다.
[참고자료]