스레드의 종류
JeongSeulho
2023년 02월 10일
준비중...
클립보드로 복사
하드웨어 스레드
코어에서 메모리에서 데이터를 기다리는 시간이 낭비되는 것을 방지하기 위해
메모리를 기다리는 동안 다른 스레드를 실행하기 위해 만든 스레드
위 그림처럼 실제 코어는 1개 이지만 메모리 대기 시간을 활용해
2개의 스레드를 실행함. 즉, OS 입장에서는 코어가 마치 2개인 것처럼 보임
OS는 이 논리코어를 기준으로 스케줄링을 함
인텔에서는 이것을
hyper-threading
이라고 부르며 물리 코어 1개당 2개의 HW thread를 만듦
논리코어의 개수(vCPU)는 곧 하드웨어 스레드의 개수를 의미
OS 스레드
- 네이티브 스레드, 커널 스레드 등으로 불리기도 함
- CPU에서 실제 실행되는 단위
- CPU 스케줄링의 단위
- 사용자의 코드와 커널 코드 모두 OS 스레드에서 실행
유저 스레드
- 스레드의 개념을 프로그래밍 레벨에서 추상화 한 것
- 그린 스레드라고도 불림
- 자바는 현재
one to one
모델을 사용
Thread thread = new Thread();
thread.start();
유저 스레드와 OS 스레드의 연결
유저 스레드가 실제 OS 스레드에 연결되어 실행 되어야함
이렇게 연결하는 방법인 관계 모델이 3가지 존재
one to one
- 하나의 유저 스레드가 하나의 OS 스레드에 연결되어 실행됨
- 스레드 관리를 OS에 위임(스케줄링, 경쟁조건 방지, 데드락 방지, 멀티 코어 활용 등)
- 하나의 스레드가 block 되어도 다른 스레드는 실행 가능
many to one
- 여러 개의 유저 스레드가 하나의 OS 스레드에 연결되어 실행됨
- 실제
Context Switching
이 일어나지 않고 프로그래밍 레벨에서만 스위칭이 일어나 빠름 - 경쟁 조건 발생 가능성이 낮음
- 멀티 코어 활용 불가
- 하나의 스레드가 block 되면 다른 스레드도 실행 불가
many to many
- 위의 2모델의 장점만 가지고 있는 모델
- 하지만 구현이 복잡함
커널 스레드(OS와 다른 의미의)
- 커널 코드를 실제 실행하는 스레드