Tech

Diary

Lecture

About Me

개발중

스레드의 종류

JeongSeulho

2023년 02월 10일

준비중...
클립보드로 복사

하드웨어 스레드

코어에서 메모리에서 데이터를 기다리는 시간이 낭비되는 것을 방지하기 위해
메모리를 기다리는 동안 다른 스레드를 실행하기 위해 만든 스레드
Image 위 그림처럼 실제 코어는 1개 이지만 메모리 대기 시간을 활용해
2개의 스레드를 실행함. 즉, OS 입장에서는 코어가 마치 2개인 것처럼 보임
OS는 이 논리코어를 기준으로 스케줄링을 함

인텔에서는 이것을 hyper-threading이라고 부르며 물리 코어 1개당 2개의 HW thread를 만듦
논리코어의 개수(vCPU)는 곧 하드웨어 스레드의 개수를 의미

OS 스레드

  • 네이티브 스레드, 커널 스레드 등으로 불리기도 함
  • CPU에서 실제 실행되는 단위
  • CPU 스케줄링의 단위
  • 사용자의 코드와 커널 코드 모두 OS 스레드에서 실행

유저 스레드

  • 스레드의 개념을 프로그래밍 레벨에서 추상화 한 것
  • 그린 스레드라고도 불림
  • 자바는 현재 one to one 모델을 사용
copy
Thread thread = new Thread();
thread.start();

유저 스레드와 OS 스레드의 연결

유저 스레드가 실제 OS 스레드에 연결되어 실행 되어야함
이렇게 연결하는 방법인 관계 모델이 3가지 존재

one to one

Image

  • 하나의 유저 스레드가 하나의 OS 스레드에 연결되어 실행됨
  • 스레드 관리를 OS에 위임(스케줄링, 경쟁조건 방지, 데드락 방지, 멀티 코어 활용 등)
  • 하나의 스레드가 block 되어도 다른 스레드는 실행 가능

many to one

Image

  • 여러 개의 유저 스레드가 하나의 OS 스레드에 연결되어 실행됨
  • 실제 Context Switching이 일어나지 않고 프로그래밍 레벨에서만 스위칭이 일어나 빠름
  • 경쟁 조건 발생 가능성이 낮음
  • 멀티 코어 활용 불가
  • 하나의 스레드가 block 되면 다른 스레드도 실행 불가

many to many

Image

  • 위의 2모델의 장점만 가지고 있는 모델
  • 하지만 구현이 복잡함

커널 스레드(OS와 다른 의미의)

  • 커널 코드를 실제 실행하는 스레드