Process vs Thread
Program → Process → Thread
Progarm : 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태(운영체제가 프로그램에게 독립적인 메모리 공간 할당X), 쉽게 말해서 코드 뭉치(.exec, .dmg)
프로그램 실행시 컴퓨터 메모리에 올라가게 되고 동적인 상태가 되며 실행되고 있는 프로그램을 프로세스라고 한다.
복잡해진 프로그램이 복잡해져 프로세스 하나만을 사용해서 실행하기 어려워졌다. 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로가 스레드이다.
운영체제는 안정성을 위해 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약
스레드는 스레드 간 메모리를 공유하면서 작동
Process
컴퓨터에서 연속적으로 실행되고 있는 프로그램
메모리에 올라와 실행되고 있는 프로그램의 인스턴스
운영체제로부터 시스템 자원을 할당받는 작업의 단위
Process 구성
- Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
- Data : 전역 변수, 정적 변수, 배열 등(초기화된 데이터)
- Stack : 지역 변수, 매개 변수, 리턴 값 (임시 메모리 영역)
- Heap : 동적 할당 시 사용 (new(), malloc() 등)
Process 특징
- 프로세스는 각각 독립된 메모리 영역을 할당 받는다.
- 프로세스는 최소 1개의 스레드를 갖는다.
- 각 프로세스는 별도의 주소 공간에서 실행, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 불가
Thread
한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 하나의 자원을 공유하면서 일련의 과정을 여러 개를 동시에 실행시킬 수 있는 것
Thread 구성
- Code, Data, Haep 영역 공유
- Stack만 스레드 별로 가짐
스택 영역은 쌓이면 프로세스가 섞인 채로 나와 복잡해지기때문에 Stack만 분리하여 사용한다.
Thread 특징
- 한 프로세스 내의 주소 공간, 자원 대부분 공유
- 기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 같이 생성(메인스레드)
- 스레드를 추가로 생성하지 않으면 모든 프로그램 코드는 메인 스레드에서 실행
- 하나의 프로세스는 여러개의 스레드를 가질 수 있다(멀티스레드)
**프로세스는 각각 독립된 메모리 영역을 할당 받기 때문에 다른 프로세스의 변수, 자료에 접근 불가하다.
스레드는 Stack 메모리만 별도로 할당받고 Code, Data, Heap 메모리는 같은 프로세스 내에서 공유한다.**
=> 따라서 한 프로세스가 오류가 발생해 종료되더라도 다른 프로세스에 영향을 주지 않지만 스레드는 하나에서 오류가 발생시 같은 프로세스 내의 모든 다른 스레드가 강제 종료된다.