Ein "Hardware-Thread" ist eine physische CPU oder ein Kern. Eine 4-Kern-CPU kann also wirklich 4 Hardware-Threads gleichzeitig unterstützen - die CPU erledigt wirklich 4 Dinge gleichzeitig.
Ein Hardware-Thread kann viele Software-Threads ausführen. In modernen Betriebssystemen erfolgt dies häufig durch Time-Slicing. Jeder Thread muss einige Millisekunden ausgeführt werden, bevor das Betriebssystem einen anderen Thread für die Ausführung auf dieser CPU plant. Da das Betriebssystem schnell zwischen den Threads hin und her wechselt, sieht es so aus, als ob eine CPU mehr als eine Sache gleichzeitig ausführt. In Wirklichkeit führt ein Kern jedoch immer noch nur einen Hardware-Thread aus, der zwischen vielen Software-Threads wechselt.
Moderne JVMs ordnen Java-Threads direkt den vom Betriebssystem bereitgestellten nativen Threads zu, sodass Java-Threads keinen inhärenten Overhead gegenüber nativen Threads verursachen. Bei Hardware-Threads versucht das Betriebssystem, Threads Kernen zuzuordnen, wenn genügend Kerne vorhanden sind. Wenn Sie also ein Java-Programm haben, das 4 Threads startet und 4 oder mehr Kerne hat, besteht eine gute Chance, dass Ihre 4 Threads wirklich parallel auf 4 separaten Kernen ausgeführt werden, wenn die Kerne inaktiv sind.
Hardware-Threads können als CPU-Kerne betrachtet werden, obwohl jeder Kern mehrere Threads ausführen kann. Die meisten CPUs geben an, wie viele Threads auf jedem Kern ausgeführt werden können (unter Linux gibt der Befehl lscpu dieses Detail an). Dies ist die Anzahl der Kerne, die parallel verwendet werden können.
Software-Threads sind Abstraktionen zur Hardware, um Multiverarbeitung zu ermöglichen. Wenn Sie mehrere Software-Threads haben, aber nicht mehrere Ressourcen, können Sie mit diesen Software-Threads alle Aufgaben parallel ausführen, indem Sie Ressourcen für eine begrenzte Zeit zuweisen (oder eine andere Strategie verwenden), sodass anscheinend alle Threads parallel ausgeführt werden. Diese werden vom Betriebssystem verwaltet. Java-Thread ist eine Abstraktion auf JVM-Ebene.
quelle
Ich denke du liegst falsch. Ich habe noch nie von Hardware-Threads gehört (es sei denn, Sie meinen Hyper-Threading auf bestimmten Intel-Computern). Jeder Prozess ist eine laufende Darstellung eines Programms. Threads sind gleichzeitige Ausführungsabläufe in einem Prozess. Java-Thread-Definitionen werden von JVM System-Threads zugeordnet. Java hatte früher ein Konzept von GreenThreads , was heute nicht mehr der Fall ist.
quelle