스레드는 CPU이용의 기본 단위이다. 스레드는 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택으로 구성된다.
스레드에는 단일 스레드와 다중 스레드가 있는데 만일 프로세스가 다수의 제어 스레드를 가진다면 프로세스는 동시에 하나 이상의 작업을 수행할 수 있다.
하나의 응용 프로그램이 여러 개의 비슷한 작업을 수행할 필요가 있는 상황들이 꽤 많다.
예를 들어, 웹 서버는 클라이언트로부터 웹 페이지나 이미지 등에 대한 요청을 받는다. 만약 웹 서버가 단일 스레드 프로세스로 작동한다면, 한 번에 하나의 클라이언트만 서비스할 수 있게 되어 클라이언트는 자신의 요구가 서비스되기까지 매우 긴 시간을 기다려야 한다.
이에 대한 해결책으로 사용했던 방법이 서버에게 서비스 요청이 들어오면 프로세스는 그 요청을 수행할 별도의 프로세스를 생성하는 것이었다. 하지만 프로세스 생성 작업은 매우 많은 자원과 시간이 필요하다.
따라서 요청이 들어오면 다른 프로세스를 생성하는 것이 아니라 요청을 서비스할 새로운 스레드를 생성하고 추가적인 요청을 listen하기 위한 작업을 재개한다.
[다중 스레드의 장점]
1 ) 응답성 : 연산이 긴 작업을 할 때 싱글 스레드는 그 작업이 끝날 때 까지 다른 작업을 할 수 없지만 다중 스레드는 다른 프로그램의 수행을 허용함으로써 사용자에 대한 응답성을 증가시킨다.
2 ) 자원 공유 : 프로세스는 공유 메모리와 메세지 전달 기법을 통하여만 자원을 공유할 수 있지만 스레드는 자동으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 따라서 같은 주소 공간 내에 여러 개의 다른 작업을 하는 스레드를 둘 수 있다.
3 ) 경제성 : 프로세스를 새로 생성하는 것보다 경제적임
4 ) 규모 적응성 : 다중 처리기 구조에서 각각의 스레드가 다른 처리기에서 병렬로 수행될 수 있다.