프로세스
프로세스란 운영체제로부터 자원을 할당받은 작업의 단위를 의미한다. 즉, 프로그램이 실행되어 작업 중인 상태에 있다면 그것은 프로세스라고 할 수 있다.
스레드
스레드란 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위를 의미한다. 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.
프로세스 vs 스레드
프로세스는 각각 별도의 주소공간 할당
- Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
- Data : 전역변수, 정적변수, 배열 등
- 초기화 된 데이터는 data 영역에 저장
- 초기화 되지 않은 데이터는 bss 영역에 저장
- Heap : 동적 할당되는 데이터를 위한 공간
- Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유
- Stack 영역을 따로 할당받음으로서 스레드가 독립적으로 함수를 호출할 수 있고, 독립적 실행 흐름을 가질 수 있다.
→ 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용한다.