스레드의 정의
스레드의 정의는 "프로세스 내에서 실행되는 여러 흐름의 단위"이다.
*프로세스에 대해 잘 모른다면 여기를 참고
스레드의 특징
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다.
- 각각의 스레드는 별도의 레지스터와 스택을 가지고 있다.
스레드의 종류
스레드를 지원하는 주체에 따라 2가지로 나눌 수 있다.
- 사용자 레벨 스레드 (User-Level Thread)
사용자 스레드는 커널 영역의 상위에서 지원되며 일반적으로 사용자 레벨의 라이브러리를 통해 구현된다. 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 관리 기능을 제공한다.
동일한 메모리 영역에서 스레드가 생성 및 관리되므로 속도가 빠른 장점이 있는 반면, 여러 개의 사용자 스레드 중 하나의 스레드가 시스템 호출 등으로 중단되면 나머지 모든 스레드 역시 중단되는 단점이 있다. 이는 커널이 프로세스 내부의 스레드를 인식하지 못하며 해당 프로세스를 대기 상태로 전환시키기 때문이다. - 커널 레벨 스레드 (Kernel-Level Thread)
커널 스레드는 운영체제가 지원하는 스레드 기능으로 구현되며, 커널이 스레드의 생성 및 스케줄링 등을 관리한다. 스레드가 시스템 호출 등으로 중단되더라도, 커널은 프로세스 내의 다른 스레드를 중단시키지 않고 계속 실행시켜준다.
참고 링크
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)
'Computer_Language > Etc.' 카테고리의 다른 글
[Process] 프로세스란 무엇인가 (0) | 2019.11.02 |
---|---|
[DevOps] DevOps란 무엇인가 (0) | 2019.11.02 |