Thread
<aside>
💡 NOTE
프로세스마다 별도의 공간을 만들기에 같은 일을 여러개 띄우고 싶을때 사용하는 것

- 프로세스는 1개만 띄워두고 관리
- 즉, 메모리 주소와 프로세스 상태, 프로세스 자원들도 공유하지만 cpu 수행과 관련된 program counter, stack, register를 별도로 관리한다. 그럼 여러개의 프로세스로 해야되는가? NO 스레드로 구성한다.
- 스레드 구성(program counter, register set, stack space)
- Thread 가 동료 thread와 공유하는 부분(= task라고 부른다.)
- code section
- data section
- OS resources
- 프로세스가 하나 만들어지면 process의 독자적인 id, 메모리를 차지하게 된다.
- 스레드를 사용하면 병렬성을 높일 수 있다 = 각 행과 열은 독립적인 연산이지만 cpu가 여러개 일때 병렬적으로 계산할 수 있다.
</aside>
Process 3
멀티스레드
<aside>
✍️ NOTE

- 멀티 스레드에서는 code, data, files를 공유한다.
- 장점 :
- Responsiveness(응답성) : 프로세스가 블록이 되면 사용자가 답답하니깐, thread가 여러개이기에 오래걸리는 것만 블록상태가 된다. 따라서 사용자는 답답함을 덜 수 있다.(그림 같은것들)
- Resource Sharing(자원 공유) : 하나의 프로세스를 만들고 그 안에 cpu 수행단위만 여러개 만들면 code data 등을 하나로 나눠쓸 수 있다.
- Economy(경제성) : 조금 더 빠르다. 프로세스 하나를 더 만들면 오버헤드가 크지만 스레드같은 경우 오버헤드가 작은 편(문맥 교환 - cpu 관련 정보, 캐쉬 등을 가져오려면) - 프로세스 생성 및 cpu 스위칭이 오버헤드가 Solaris(UNIX의 일종) 프로세스 생성( 오버헤드 비용 30배), cpu 스위칭 (오버헤드 비용 5배) 더 든다.
- Utilization of MP Architectures : 멀티 프로세스 환경에서 각각의 스레드를 효율적으로 사용할 수 있다. (굉장히 큰 행렬을 곱한다거나 할때 모든 프로세스를 균등히 나눠서 작업하므로)
Kernel Threads : 커널이 멀티 스레드를 하는 것을 알아서 스레드 별로 역할을 정해준다.
User Threads : 유저 프로그램이 스레드를 라이브러리의 지원을 받아 관리한다. 따라서 구현상의 제약점은 있을 수 있다.
</aside>