programing

소프트웨어 스레드 대 하드웨어 스레드

projobs 2021. 1. 14. 08:01
반응형

소프트웨어 스레드 대 하드웨어 스레드


소프트웨어 스레드, 하드웨어 스레드 및 Java 스레드의 차이점은 무엇입니까?

소프트웨어 스레드, Java 스레드 및 하드웨어 스레드는 독립적입니까 아니면 상호 의존적입니까? Java 스레드가 jvm (java.exe)에서 프로세스 내부에 생성된다는 것을 알고 있기 때문에 이것을 묻습니다.

또한 이러한 다른 프로세스가 다른 하드웨어 스레드에서 실행된다는 것도 사실입니까?


소프트웨어 스레드는 운영 체제에서 관리하는 실행 스레드입니다.

하드웨어 스레드는 일부 상황에서 프로세서를 더 잘 활용할 수있는 일부 프로세서의 기능입니다. 추가 코어 ( "하이퍼 스레딩")로 보이는 것처럼 운영 체제에 노출 될 수 있습니다.

Java에서 생성 한 스레드는 JVM이 "운영 체제"인 소프트웨어 스레드 추상화를 유지합니다. JVM이 Java 스레드를 OS 스레드에 매핑하는지 여부는 JVM의 업무입니다 (하지만 거의 확실합니다). 그런 다음 OS는 사용 가능한 경우 하드웨어 스레드를 사용합니다.


"하드웨어 스레드"는 물리적 CPU 또는 코어입니다. 그래서, 4 코어 CPU가 할 수 진정으로 CPU가 정말 같은 시간에 4 일을한다 - 한 번에 4 개 개의 하드웨어 스레드를 지원합니다.

하나의 하드웨어 스레드가 여러 소프트웨어 스레드를 실행할 수 있습니다. 최신 운영 체제에서 이것은 종종 시간 분할에 의해 수행됩니다. OS가 해당 CPU에서 실행되도록 다른 스레드를 예약하기 전에 각 스레드가 실행되는 데 몇 밀리 초가 걸립니다. OS가 빠르게 앞뒤로 스레드 간의 전환 때문에 나타나는 하나 개의 CPU가 한 번에 두 개 이상의 일을하고있는 것처럼, 그러나 실제로, 핵심은 여전히 많은 소프트웨어 스레드 사이를 전환 하나의 하드웨어 쓰레드를 실행 중입니다.

최신 JVM은 자바 스레드를 OS에서 제공하는 네이티브 스레드에 직접 매핑하므로 자바 스레드와 네이티브 스레드로 인한 고유 한 오버 헤드가 없습니다. 하드웨어 스레드와 관련하여 OS는 충분한 코어가있는 경우 스레드를 코어에 매핑하려고합니다. 따라서 4 개의 스레드를 시작하는 Java 프로그램이 있고 4 개 이상의 코어가있는 경우 코어가 유휴 상태 인 경우 4 개의 스레드가 4 개의 개별 코어에서 실제로 병렬로 실행될 가능성이 높습니다.


나는 당신이 착각했다고 생각합니다. 하드웨어 스레드에 대해 들어 본 적이 없습니다 (특정 인텔 컴퓨터에서 하이퍼 스레딩을 의미하지 않는 한). 모든 프로세스는 프로그램의 실행 표현입니다. 스레드는 프로세스에서 동시에 실행되는 흐름입니다. Java 스레드 정의는 JVM에 의해 시스템 스레드에 매핑됩니다. Java는 GreenThreads 개념을 가지고 있었지만 더 이상 그렇지 않습니다.

참조 URL : https://stackoverflow.com/questions/5593328/software-threads-vs-hardware-threads

반응형