make a splash
article thumbnail
728x90

Multithreading Models

스레드에 대한 지원은 두가지 level이 있다

 

- 사용자 스레드 : 커널 위에서 지원되며 커널 지원 없이 관리 된다.

- 커널 스레드 : 운영 체제에서 직접 지원 및 관리된다.

 

Wiridows XP, Linux, Mac OS X, Solaris 및 Tru64 UNIX(이전의 Digital UNIX)를 포함한 거의 모든 최신 운영 체제는 커널 스레드를 지원한다.

 


 

사용자 스레드와 커널 스레드 간에 관계에 따라 세가지로 분류된다.

- Many-to-One

- One-to-One

- Many-to-Many

 

1. Many-to-One Model

다대일 모델은 많은 사용자 수준 스레드를 하나의 커널 스레드에 매핑한다.

스레드 관리는 사용자 공간의 스레드 라이브러리에 의해 수행되므로 효율적이다. 

그러나 스레드가 차단 시스템 호출을 하면 전체 프로세스가 차단된다. 

한 번에 하나의 스레드만 커널에 액세스할 수 있으므로 다중 프로세서에서 여러 스레드를 병렬로 실행할 수 없다.

이 시스템을 선택하는 모델은 적다!

사용 : Solaris Green Threads, GNU Portable Threads

 

2. One-to-One Model

일대일 모델은 각 사용자 스레드를 커널 스레드에 매핑한다.

스레드가 차단 시스템 호출을 만들 때 다른 스레드가 실행되도록 허용하여 다대일 모델보다 더 많은 동시성을 제공한다.

다중 스레드가 다중 프로세서에서 병렬로 실행될 수 있다. 

이 모델의 유일한 단점은 사용자 스레드를 생성하려면 해당 커널 스레드를 생성해야 한다. 

커널 스레드 생성의 오버헤드는 애플리케이션의 성능에 부담을 줄 수 있기 때문에 이 모델의 대부분의 구현은 시스템에서 지원하는 스레드 수를 제한한다. 

사용 : Linux, Window

 

3. Many-to-Many Model

다대다 모델은 많은 사용자 수준 스레드를 더 작거나 같은 수의 커널 스레드로 다중화한다.

커널 스레드의 수는 특정 응용 프로그램이나 특정 시스템에 따라 다를 수 있다.

다대일 모델을 사용하면 개발자가 원하는 만큼 사용자 스레드를 생성할 수 있지만 커널은 한 번에 하나의 스레드만 예약할 수 있기 때문에 진정한 동시성은 얻을 수 없다.

일대일 모델은 더 큰 동시성을 허용하지만 개발자는 애플리케이션 내에서 너무 많은 스레드를 생성하지 않도록 주의해야 한다.

(어떤 경우에는 생성할 수 있는 스레드 수가 제한될 수 있음)

개발자는 필요한 만큼 사용자 스레드를 생성할 수 있고 해당 커널 스레드는 다중 프로세서에서 병렬로 실행할 수 있다.

스레드가 차단 시스템 호출을 수행할 때 커널은 실행을 위해 다른 스레드를 예약할 수 있다.

 

4. Two-level Model

2단계 모델이라 하고 변형.. 정도

다대다 모델과 비슷하지만 사용자 스레드가 커널 스레드에 바인딩되는 것을 허용한다.

사용 : IRlX, HP-UX Tru64 UNIX

( Solaris 운영 체제는 Solaris 9 이전 버전에서 2단계 모델을 지원했으나 Solaris 9부터 시스템은 일대일 모델을 사용)

728x90
반응형
profile

make a splash

@vision333

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!