스레드
![](https://velog.velcdn.com/images/chullll/post/3bd49951-3aac-49b9-aa54-e68a1ebf54d7/image.png)
- 스레드는 CPU의 실행 단위가 여러개가 있는 경우 그 실행의 기본 단위를 말한다.
- 하나의 프로세스에 여러 개의 CPU 수행 단위를 두고 있는 것을 스레드라고 말함.
- 프로세스는 메모리에 독립적으로 할당받기 때문에 여러 개의 프로세스를 띄우면 메모리 공간이 낭비된다. 이러한 단점을 개선하기 위해서 스레드를 도입했다. -> 더 가볍다
- 스레드는 자신의 수행 위치를 파악해야 하고 독립적으로 일을 수행하기 때문에 스레드 마다 PC register와 Stack을 가지고 있다.
PCB와 스레드
![](https://velog.velcdn.com/images/chullll/post/c96fba3c-e51e-4214-a3ab-f23643600714/image.png)
- 스레드는 PCB에 CPU와 관련된 정보들을 별도로 가지고 있는다.
스레드의 구성
- PC
- register set
- stack space
스레드가 동료 스레드와 공유하는 부분 (= task 라고 칭함)
- data section
- code section
- OS resources
스레드의 장점
- 응답성
- 다중 스레드로 구성된 task 구조에서는 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도 동일한 task 내 다른 스레드가 running 되어 빠르게 처리할 수 있다. -> 응답시간이 빨라짐
- 병렬성을 높일 수 있다.
- e.g) multi-threaded Web: 페이지를 띄울 때 네트워크 통신이 필요한 부분을 처리하는 스레드가 blocked 되어도 다른 스레드가 나머지 html 문서를 읽어서 페이지를 띄어줌
- 자원 공유
- 자원을 절약할 수 있다. -> 독립적인 메모리를 할당받는 프로세스를 사용하는 것보다 메모리 사용량이 줄어듦
- 효율성
- 프로세스를 만드는 비용은 크고, context switching 오버헤드를 줄일 수 있다.
- 동일한 일을 수행하는 다중 스레드가 협력해 높은 처리율과 성능 향상을 얻을 수 있다.
- e.g) Solaris 같은 경우 각각 프로세스가 30배/5배 더 많이 걸린다.
- 다중 CPU(multi-processor)에서의 효율성
- 다른 CPU에서의 각각의 스레드들은 병렬적으로 일을 할 수 있다. -> 더 빠른 결과값을 얻을 수 있음