CS

스레드의 종류

kyoulho 2024. 8. 12. 10:39

하드웨어 스레드

  • CPU가 메모리에서 데이터를 읽거나 쓸 때 지연이 발생한다. 이 시간을 비효율적으로 보내지 않기 위해 생겨난 기술로, 물리적 CPU 코어가 동시에 여러 작업을 수행할 수 있도록 지원하는 기술이다.
  • 이 스레드는 운영 체제(OS)에서 가상의 코어로 인식되며, OS는 이를 실제 물리적 코어로 간주하여 스케줄링한다.
  • 싱글 코어 CPU에 하드웨어 스레드가 두 개 있다면, OS는 이를 듀얼 코어 CPU로 인식해 스레드를 할당하고 스케줄링한다.
  • 인텔 Hyper-Threading: 인텔의 하이퍼 스레딩 기술은 하나의 물리적 코어에 두 개의 하드웨어 스레드를 할당하여, 코어가 동시에 두 개의 스레드를 처리할 수 있게 한다. 이를 통해 CPU의 유휴 시간을 줄이고 자원을 최대한 활용할 수 있다. 예를 들어, 하이퍼 스레딩이 적용된 4 코어 CPU는 총 8개의 하드웨어 스레드를 가지고 있으며, 이는 OS에서 8개의 가상 코어로 인식된다.

 

OS 스레드

  • 운영 체제의 커널에 의해 생성되고 관리되는 스레드로, CPU에서 실제로 실행되는 작업 단위이다. OS 스레드는 CPU 스케줄링의 기본 단위이며, 사용자 애플리케이션 코드와 시스템의 커널 코드 모두를 실행한다.
  • OS 스레드의 다양한 명칭:
    • 네이티브 스레드(Native Thread)
    • 커널 스레드(Kernel Thread): 맥락에 따라 커널 코드를 수행하는 스레드를 지칭할 때도 있다.
    • 커널-레벨 스레드(Kernel-Level Thread)
    • OS-레벨 스레드(OS-Level Thread)
OS 스레드 8개가 하이퍼 스레딩이 적용된 인텔 듀얼 코어에서 동작한다면, OS 스레드들을 어떻게 코어에 균등하게 할당할 수 있을까?
하이퍼 스레딩이 적용된 듀얼 코어 CPU는 4개의 가상 코어로 인식된다. 8개의 OS 스레드를 4개의 가상 코어에 균등하게 할당하기 위해, 각 가상 코어에 2개의 OS 스레드를 매핑하게 된다. OS 스케줄러가 이를 자동으로 관리하여, 스레드가 적절히 분배되도록 조정한다.

 

유저 스레드

  • 운영 체제와 독립적으로, 프로그램 내에서 관리되는 스레드이다. 유저-레벨 스레드(User-Level Thread)라고도 불리며, 이 스레드는 직접적으로 OS 스레드와 연결되지 않고, 프로그램 내에서 가상화된 스레드이다.
  • 유저 스레드와 OS 스레드의 연결: 유저 스레드가 실제로 실행되기 위해서는 반드시 하나 이상의 OS 스레드와 연결되어야 한다. OS 스레드와 유저 스레드 간의 매핑 방식에 따라 시스템의 성능과 동작 방식이 달라진다.

유저 스레드와 OS 스레드의 매핑 모델

  • One-to-One 모델: 각 유저 스레드가 하나의 OS 스레드에 대응된다.
    • 장점: 멀티코어를 효과적으로 활용할 수 있고, 한 스레드가 블로킹되어도 다른 스레드가 정상적으로 동작한다.
    • 단점: 많은 스레드 생성 시 OS 자원이 많이 소모되고, Race Condition(경쟁 조건) 가능성이 높아진다.
    • 예시: 자바 언어의 스레드 모델이 이에 해당한다.
  • Many-to-One 모델: 여러 유저 스레드가 하나의 OS 스레드에 연결된다.
    • 장점: 유저 스레드 간 전환이 빠르고, Race Condition 발생 가능성이 낮다.
    • 단점: 멀티코어 CPU를 제대로 활용하지 못하며, 하나의 스레드가 블로킹되면 다른 스레드도 함께 블로킹된다.
    • 적용 사례: 초기의 자바 가상 머신(JVM)과 일부 사용자 수준 스레드 라이브러리.
  • Many-to-Many 모델: 여러 유저 스레드가 여러 OS 스레드에 연결되는 모델로, 멀티코어 활용이 가능하며 One-to-One과 Many-to-One의 장점을 결합한다.
    • 장점:
      • 멀티코어 활용: 여러 OS 스레드를 사용하여 유저 스레드를 병렬로 실행할 수 있으므로 멀티코어 CPU의 성능을 최대로 활용할 수 있다.
      • 효율적인 자원 사용: 유저 스레드와 OS 스레드의 매핑을 유연하게 조정할 수 있어 시스템 자원을 효율적으로 사용 가능하다.
      • 블로킹 문제 해결: 하나의 유저 스레드가 블로킹되어도 다른 유저 스레드는 다른 OS 스레드에서 계속 실행될 수 있어, 작업 중단 없이 시스템이 동작한다.
      • 유연한 스레드 관리: 유저 스레드와 OS 스레드 간의 매핑을 동적으로 조정할 수 있어, 특정 유저 스레드가 효율적으로 실행될 수 있도록 한다.
    • 단점: 시스템 복잡성이 높아 구현이 어렵고, 스레드 관리에 더 많은 자원이 필요하다.
    • 적용 사례: 일부 고성능 서버 및 병렬 컴퓨팅 환경.

 

그린 스레드

  • 초기 자바 버전에서 사용된 Many-to-One 모델에서 이 용어가 등장했다. Many-to-One 모델에서 유저 스레드를 지칭하는 용어이다.
  • 초기의 자바 가상 머신(JVM)에서 사용되었으나, 이후 One-to-One 모델로 전환되었다.

'CS' 카테고리의 다른 글

[Linux] 스왑 공간  (0) 2024.08.26
Blocking I/O & Non-Blocking I/O  (0) 2024.08.12
운영 체제의 모드와 시스템 콜  (1) 2024.08.11
CPU Scheduler & Dispatcher  (0) 2024.08.11
프로세스/스레드 상태 변화  (0) 2024.08.11