CPU가 수행할 어셈블리 명령어가 파일 형태로 존재하는데 이를 프로그램이라고 한다.
이 프로그램을 OS가 실행하면 OS는 개별적인 메모리 영역을 할당하여 프로그램 파일에 있는 데이터를 이 메모리에 로딩 시킨다.
이렇게 프로그램이 실행된 상태를 프로세스라고 한다.
프로세스가 되면 CPU는 프로세스 메모리에 있는 명령어들을 실행하게 된다.
이때 실행하기 위하여 쓰레드가 필요하다
쓰레드는 프로세스가 코드를 실행시키기 위하여 관리하는 하나의 흐름이다.
프로세스는 여러 쓰레드를 관리할 수 있으며 각 쓰레드마다 개별적인 메모리(TLS, 스택, 레지스터)를 소유하게 된다.
프로세스가 맨 처음 실행하는 쓰레드를 메인 쓰레드라고 하는데 UI를 가진 프로그램은 이를 UI 쓰레드라고도 한다.
쓰레드는 stack 메모리만 별도로 유지하고 code, data, heap 메모리 영역은 공유한다.
쓰레드는 일부 메모리를 공유한다 하지만 프로세스는 메모리를 공유하지 않기에 공유를 위해서는 IPC 같은 기법을 사용해야 한다.
Process Context Switching 비용이 Thread 보다 크다.
Process Context Switching : PCB, Stack, Heap, Data, Code
Thread Context Switching : TCB, Stack
실제로 main 코드를 동작 시키는 것은 프로세스가 아닌 쓰레드이다
프로세스는 쓰레드가 동작 할 수 있는 환경을 제공한다