쓰레드란 프로세스 내에서 실행되는 흐름의 단위
이다.
쓰레드는 각각의 레지스터와 stack영역을 할당받고, 프로세스의 heap, stack, code영역을 공유한다. 따라서 하나의 heap영역에 다른 쓰레드가 동시에 접근할 수 있다. 쓰레드 또한 프로세스처럼 스케쥴 관리의 대상이다. 따라서 컨텍스트 스위칭이 발생한다. 하지만 공유하고 있는 메모리 영역 덕분에 프로세스에 비해 오버헤드가 적다.
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고
쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
새로운 프로세스의 생성은 많은 시간과 자원을 소모한다.
스택은 함수 호출시 전달되는 인자, 복귀 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행흐름이 가능하게 한다.
따라서 독립적인 실행 흐름을 위한 최소 조건으로 독립된 스택을 할당한다.
PC값은 쓰레드가 명령어를 어디까지 수행했는지를 나타내게 된다. 쓰레드는 CPU를 할당받았다가 스케쥴러에 의해 다시 선점당한다. 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있다. 따라서 PC 레지스터를 독립적으로 할당하는 것이다.
상호 간의 통신
이 가능하다.프레소스 내 스레드가 여러 개라는 것을 OS가 알고 있는 쓰레드이다. 그래서 커널이 쓰레드 스케쥴링을 맡아서 하게 된다.
라이브러리 차원에서 지원되는 쓰레드이다. 프로세스 안에 쓰레드가 여러 개 있다는 것을 OS가 모르기 때문에 커널 입장에서는 하나의 일반적인 프로세스로 인식
된다.
참고