Thread
프로세스 내부에 CPU 수행 단위가 여러 개 존재하는 것을 말한다
주소공간의 구조 (Thread 추가)
Thread1의 Stack/ Thread2의 Stack / Thread3의 Stack
data
code
Thread의 구성
- program counter
- register set
- stack space
-> program counter가 코드의 어느 부분을 가리키는지, register의 값이 어떻게 되는지를
stack에 쌓는다
Thread가 동료 쓰레드와 공유하는 부분(task)
- code section
- data section
- OS resources
정통적인 개념의 heavyweight proces는 하나의 Thread를 가지고 있는 task라고 볼 수 있다
프로세스 안에 쓰레드를 여러 개 두는 것이 가볍기 때문에 쓰레드로 관리하는 것을
lightweight process라고 한다
Thread의 특징
다중 쓰레드로 구성된 task 구조에서는 하나의 서버 쓰레드가 blocked 상태인 동안에도
동일한 task 내의 다른 쓰레드가 실행되어 빠른 처리를 할 수 있다
-> 웹 브라우저에서 웹 페이지를 불러옴과 동시에 다른 작업도 가능하다
동일한 일을 수행하는 다중 쓰레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다
-> 자원 절약이 가능하다
쓰레드를 사용하면 병렬성을 높일 수 있다
-> 주로 연산이 이루어지는 상황에서 유리하다
*blocked = waiting 상태, throughput = 처리율, running = 실행
프로세스마다 하나의 PCB가 만들어지고, 이를 운영체제가 관리한다
프로세스 안에 쓰레드가 여러 개 존재하고 각 쓰레드는 CPU 수행과 관련된 정보를 별도로 가지고 있다 //stack
Thread의 장점
CPU가 1개인 경우에도 적용 가능한 일반적인 경우
응답성(Responsiveness)
네트워크 요청을 한 쓰레드가 blocked 되는 동안 다른 쓰레드가 응답을 한다
-> 비동기
자원 공유(Resource Sharing)
같은 일을 하는 프로그램이 여러개인 경우 하나의 프로세스 안에 CPU 단위를 여러 개 두어 자원을 효율적으로 사용 가능하다
경제성(Economy)
프로세스를 만드는 것은 비용이 많이 들지만 프로세스 안에 쓰레드를 여러 개 추가하는 것은 부담이 적다
-> 쓰레드를 생성하는 것이 비용이 적게 든다
CPU가 여러 개인 경우
쓰레드가 여러 개인 경우 병렬적으로 일을 처리할 수 있다 = 효율적으로 실행 가능하다
쓰레드의 구현
운영체제 커널의 지원을 받는 쓰레드
-> 커널쓰레드
쓰레드가 여러 개 있다는 사실을 커널이 알고 있다.
라이브러리의 형태로 구현한 쓰레드
-> 유저 쓰레드
라이브러리를 통해서 지원된다
프로세스 안에 쓰레드가 여러 개라는 사실을 운영체제가 모른다
유저 프로그램이 스스로 여러개의 쓰레드를 관리한다
-> 구현상의 제약점이 존재한다