> For the complete documentation index, see [llms.txt](https://real-dev.gitbook.io/real-library/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://real-dev.gitbook.io/real-library/os_with_joonion/8-.-multi-thread.md).

# 8강. Multi Thread

#### Thread의 종류

* user Thread
  * 사용자가 동작시킨 쓰레드
  * 운영체제, 즉 하드웨어의 제어권이 없는 쓰레드
* kernel Thread
  * 운영체제가 동작시킨 쓰레드
  * 하드웨어에 직접 간섭할 수 있는 쓰레드
* user Thread와 kernel Thread 간에는 1:1, 1:N, N:N 관계가 성립한다. 가장 기본적으로는 Many To One 모델을 채용하지만, 유저 쓰레드가 많아지면 커널 쓰레드의 부하가 높아지므로 Many To Many 모델로 변환하기도 한다.
* 두 개의 프로세스는 전역 변수를 공유하지 않지만, 멀티 쓰레드 환경에선 전역 변수를 공유한다. Data 영역을 공유하니까…

<br>

#### Implict Threading

* Thread 실행의 복잡성을 임의로 양도하여 수행
* 병렬 처리, 시분할 어플리케이션의 디자인이 너무 힘들다보니 이런 부분을 라이브러리, 컴파일러로 양도하는 것. Java에선 java.conccurrent 패지키에 정의되어 있음
* 예를 들어 쓰레드가 무한히 생성되는 것을 방지하기 위해, Thread Pool 을 제공하여 관리하거나 그런 것들

\ <br>
