A thread (or lightweight process) is a basic unit of CPU utilization
1개의 Process (Access space 1개, PCB도 1개)에 CPU 수행 단위를 여러 개 두는 것
즉, Process 내에서 공유할 수 있는 것은 최대한 공유하고 CPU 수행과 관련된 정보 (PCB-program counter, register, Access space-stack)만 공간을 나눠 별도로 두는 방식.
전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다.
1) Responsiveness
다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행(running)되어 빠른 처리를 할 수 있다.
ex) multi-threaded Web - if one thread is blocked (eg. network) another thread continues (eg. display)
2) Resource Sharing
다중 스레드를 사용하면 code, data 등의 자원을 효율적으로 사용할 수 있다. 다중 스레드가 아니라 별도의 process를 생성하여 작업하면 공유할 수 있는 부분이 있음에도 각각의 process에 대하여 별도의 access space를 생성해 주어야하기 때문에 메모리가 낭비되는 측면이 있다.
3) Economy
creating & CPU switching thread (rather than a process)
Solaris의 경우 위 두 가지 overhead가 각각 30배, 5배
동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다.
4) Utilization of MP(multi-processer) Architectures
1) Some are supported by Kernal (Kernal Threads)
운영체제가 Process안에 thread가 여러 개 있는지 안다.
2) Others are suppoerted by library (User Threads)
운영체제는 Process안에 thread가 여러 개 있는지 모른다.
Some are real-time threads