
쓰레드는 CPU 수행의 기본 단위 또는 프소세스 안에서 제어권의 흐름이다.
구성
각각의 쓰레드는 최소한 자신의 레지스터 상태, 스택을 주로 갖는다.
Code, Data, 운영체제 자원은 쓰레드끼리 공유한다.

싱글 쓰레드 : 한 프로세스가 하나의 스레드를 이용하여 한 번에 한 작업만 수행하는 것
멀티 쓰레드 : 한 프로세스가 여러 쓰레드로 동시에 여려 작업을 수행하는 것
프로세서가 여러개인 경우 멀티 쓰레드를 통해 병렬성을 높일 수 있다.
프로세서가 하나인 경우 멀티 쓰레드를 통해 동시성을 높일 수 있다.
멀티쓰레딩의 장점
1. 응답성 : 작업을 분리하여 실행하므로 실시간으로 사용자에게 응답할 수 있다.
2. 자원공유 : 쓰레드는 자신이 속한 프로세스 내의 쓰레드와 자원을 공유 하여 효율적이다.
3. 경제성 : 프로세스를 새로 생성하는 것 보다 쓰레드를 생성하는게 효율적이고 경제적이다.
4. 확장성 : 멀티 쓰레드의 경우 한 프로세스를 여러 프로세서에서 수행 할 수 있다.
유저쓰레드 : 커널위에서 커널의 지원 없이 유저 수준의 쓰레드 라이브러리가 관리하는 쓰레드
커널 쓰레드 : 커널이 지원하는 쓰레드

커널 쓰레드는 안정적이지만 성능이 저하, 유저 쓰레드는 안정성은 떨어지지만 성능 저하가 없다.
두 쓰레드의 관계를 설계하는 방법
Many-to-One Model : 하나의 커널 쓰레드에 여러 유저 쓰레드를 연결하는 모델
한 유저 쓰레드만 커널에 접근할 수 있기에 멀티 프로세서 시스템에서 병렬적 수행이 어렵다.
One-to-One Model : 하나의 커널에 하나의 유저가 대응하는 모델
동시성을 높여주나 유저를 늘리면 커널도 늘어나기에 성능 저하가 발생 가능함
Many-to-Many Model : 여러 유저에 적거나 같은 수의 커널이 대응하는 모델
Many-to-one Model에 비해 더 높은 동시성을 갖고, One-to-One Model의 단점이었던 커널 스레드 생성의 오버헤드도 걱정할 필요 없다.
Two-level Model : Many-to-Many Model에서 확장된 개념
특정 유저 스레드를 위한 커널 스레드를 별도로 제공하는 모델