1. 프로세스
프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다.
-위키백과
2. 쓰레드
스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.
-위키백과
3. 프로세스 vs 쓰레드
- 프로세스와 스레드 양쪽 모두 여러 흐름을 동시에 진행된다는 공통점을 갖고 있다.
- 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
4. 멀티 프로세스와 멀티 스레드
- 멀티프로세스 : 독립적인 다수의 프로세스, 메모리 공간(코드, 데이터, 힙, 스택)을 공유하지 않음.
- 멀티스레드 : 하나의 프로세스 안에서 다수의 스레드, 메모리 공간(코드, 데이터, 힙)을 공유하지만 스택을 공유하지 않음! 또한 PC 레지스터 값을 갖고 있다.
스택은 왜 공유하지 않을까?
스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다. 즉, 독립적인 함수 호출과 독립적인 실행 흐름을 가능캐 하기 위해 독립된 스택을 할당한다. 독립적인 실행 흐름을 보장하기 위한 최소한의 조건이 독립된 스택을 부여하는 것이다.
PC 레지스터를 왜 쓰레드마다 독립적으로 할당할까?
PC값은 쓰레드가 명령어의 어디까지 수행하였는지를 나타낸다. 컨텍스트 스위칭이 발생할 때, 명령어가 어디까지 수행되었는지 쓰레드 별로 기억할 필요가 있기 때문이다.