(이 포스트는 기본적으로 아래 영상을 보고, 정리하는 글입니다.
https://www.youtube.com/watch?v=vorIqiLM7jc&t=491s)
요즘 스레드에 대해서 공부하고 있는데 의문이 생겼다.
"내 컴퓨터의 CPU의 코어의 개수는 한정 되어 있는데 어떻게 컴퓨터는 수많은 프로그램을 실행시킬 수 있을까..?" 그리고 이를 찾아보면서 다양한 종류의 스레드가 있다는 것을 알았고 이를 정리해보고자 한다.
- CPU CORE 내에 Thread를 의미한다. 일반적으로 1 CORE - 1 Thread이지만 CPU 아키텍쳐의 발달과 효율적으로 자원을 사용하기 위해 SMT(Simultaneous Multi Threading, AMD) 또는 HT(Hyper Threading,인텔) 기술을 이용하여 가상의 스레드라는 개념이 추가되어 1 CORE 2 Thread로 구성.
(물론 그 이상으로 발전 할 수 있습니다.)- OS 관점에서 보면 가상의 코어임
이를 비유하면, 어떤 사람이 꽃집을 운영한다고 하면 코어는 전화 주문을 받는 상담원이고, 상담원은 주문서를 정리하여 스레드인 플로리스트에게 넘기고, 플로리스트가 일을 하여 꽃을 제작하는 것!
인텔 듀얼 코어 CPU에 Hyper Threading이 적용됐다면 하드웨어 스레드는 총 몇 개인가요?
4개, OS는 듀얼 코어가 아니라 쿼드 코어로 인식!
(네이티브 Thread, OS Thread, OS레벨 Thread라도도 함.)
- 커널 레벨에서 생성되는 스레드이다.
- 운영체제 시스템 내에서 생성되어 동작하는 스레드로, 커널이 직접 관리한다.
- CPU에서 실제로 실행되는 단위(CPU 스케줄링의 단위)
스케줄러가 스레드1, 스레드2, 스레드3을 직접 관리한다!
하이퍼 쓰레딩이 적용된 인텔 듀얼 코어 위에서 동작한다면 8개의 커널 스레드들을 어떻게 코어에 균등하게 할당할 수 있을까?
- 스레드 개념을 프로그래밍 레벨에서 추상화 한 것!
- 사용자 단에서 생성 및 관리되는 스레드이다.
(그래서 커널이 따로 관리하지 않고, 커널이 이 스레드에 대해서 알지도 못한다.)- 유저 스레드가 cpu에서 실행되려면 커널 스레드와 반드시 연결돼야 한다.
커널 수준 Thread
장점: 커널에서 직접 제공하기 때문에 안정성과 다양한 기능성 제공
단점: 유저 모드에서 커널 모드로의 전환이 빈번하기 때문에 느림
사용지 수준 Thread
장점: 유저 모드에서 커널 모드로의 전환이 필요없기 때문에 빠름
단점: 프로세스 단위 블록킹 발생
유저 스레드가 cpu에서 실행되려면 커널 스레드와 반드시 연결돼야 한다.
이게 무슨 소린가? 기본적 CPU에서 실행되는 단위는 커널 스레드이기 때문! 따라서 유저 스레드는 반드시 커널 스레드와 연결이 되어야 하고, 그 후에 커널 스레드가 CPU에서 실행이 된다.
하드웨어 스레드 === CPU 레벨 용어
커널 스레드 === 커널 레벨 용어
User 스레드 === 프로그래밍 언어 혹은 프로그래밍 언어의 virtual machine 용어 (JVM 등)
이미지 출처-플로리스트 비유
이미지 출처-커널 수준 스레드, 사용자 수준 스레드
쉬운코드-유튜브
한빛미디어-유튜브
Hello Inyong-티스토리
자바로 배우는 프로그래밍
[4] 일단은 내 이야기-티스토리