[OS] 4-2강

ERror.ASER·2021년 4월 27일
1

OS

목록 보기
6/8
post-thumbnail

thread의 type

  1. user thread : 사용자 수준의 스레드 라이브러리가 관리하는 스레드다. 유저 스레드를 사용하면 안정성은 떨어지지만 성능이 저하되지는 않는다.
  2. kernel thread : 커널이 지원하는 스레드다. 커널 스레드를 사용하면 안정적이지만 유저 모드에서 커널 모드로 계속 바꿔줘야 하기 때문에 성능이 저하된다.

thread library

  1. POSIX Pthreads
  2. Win32 threads
  3. Java threads (JVM) : java vm은 운영체제의 core를 넘나들 수 없다.

Multithreading Models

유저 스레드와 커널 스레드의 관계를 설계하는 여러가지 방법이 있다.

Many-to-One Model

하나의 커널 스레드에 여러 개의 유저 스레드를 연결하는 모델이다. 한 번에 하나의 유저 스레드만 커널에 접근할 수 있기 때문에 멀티코어 시스템에서 병렬적인 수행을 할 수가 없다. 요즘에는 잘 사용되지 않는 방식이다.

One-to-One Model

하나의 유저 스레드에 하나의 커널 스레드가 대응하는 모델이다. 동시성을 높여주고, 멀티프로세서 시스템에서는 동시에 여러 스레드를 수행할 수 있도록 해준다. 유저 스레드를 늘리면 커널 스레드도 똑같이 늘어나는데, 커널 스레드를 생성하는 것은 오버헤드가 큰 작업이기 때문에 성능 저하가 발생할 수 있다.

Many-to-Many Model

여러 유저 스레드에 더 적거나 같은 수의 커널 스레드가 대응하는 모델이다. 운영체제는 충분한 수의 커널 스레드를 만들 수 있으며, 커널 스레드의 구체적인 개수는 프로그램이나 작동 기기에 따라 다르다. 멀티프로세서 시스템에서는 싱글프로세서 시스템보다 더 많은 커널 스레드가 만들어진다.

Two-level Model

Many-to-Many 모델과 비슷한데, 특정 유저 스레드를 위한 커널 스레드를 따로 제공하는 모델을 말한다. 점유율이 높아야 하는 유저 스레드를 더 빠르게 처리해줄 수 있다.

Implicit threading

Thread Pools

여러개의 스레드들을 pool에 넣고 저장한 후, 필요하면 꺼내서 사용
스레드를 요청할 때마다 매번 새로운 스레드를 생성하고, 수행하고, 지우고를 반복하면 성능이 저하된다. 그래서 미리 스레드 풀에 여러 개의 스레드를 만들어두고 요청이 오면 스레드 풀에서 스레드를 할당해주는 방법을 사용한다.

출처
https://parksb.github.io/article/8.html
인프런 강의

profile
지우의 블로그

0개의 댓글