Multithreading

Beim Multithreading werden die einzelnen Tasks (Aufträge) in kleinere eigenständige Prozesse (= Threads) aufgeteilt.  Ein multithreading-fähiger Prozessor ist somit in der Lage, mehrere Threads auf einmal zu bearbeiten. Echte Parallel-Verarbeitung ist nur bei mehreren Prozessoren gegeben.  Aber auch ein einzelner Prozessor, der multithreading-fähig ist, kann damit schneller arbeiten, wenn die Threads intelligent abgearbeitet werden, beispielsweise durch Verkürzung von Wartezeiten, optimale Auslastung bzw. Einlastung (Scheduling) von  Threads. Im Unterschied zum Multitasking bezieht sich die Nebenläufigkeit nicht nur auf Prozesse sondern auch auf Bearbeitungsstränge (Threads) innerhalb der Prozesse. Intel leitet seine Hyper-Threading-Technologie vom Multithreading ab. Es handelt  sich um Simultaneous Multithreading (SMT) beim Pentium 4 und XEON Prozessor. Diese Technologie erhöht die Leistung von multi-threaded Anwendungen, indem sie die Auslastung der On-Chip-Ressourcen (welche in der Intel NetBurst Architektur verfügbar sind)  erhöht. Die NetBurst-Ressourcen sind im Normalfall nur zu 30% + X ausgelastet. Hyper-Threading erhöht diese Auslastung durch entsprechende Logik und erzeugt einen zweiten logischen Prozessor.  Weitere Beispiele für Prozessoren mit Multithreading sind der UltraSPARC T1 (Niagara), UltraSPARC T2 (Niagara II) oder der Rock Prozessor von Sun Microsystems.  Man unterscheidet softwareseitiges Multithreading und hardwareseitiges Multithreading. 

Softwareseitiges Multithreading
Beim softwareseitigen Multithreading steht meist nur ein Prozessor zur Verfügung. Die einzelnen Threads werden effizient auf die zur Verfügung stehenden Ressourcen aufgeteilt.  Die Anzahl der Threadwechsel sollte jedoch möglichst gering sein um den dadurch entstehenden Verwaltungsaufwand möglichst gering zu halten. 

Hardwareseitiges Multithreading
Beim hardwareseitigen Multithreading wird das Multithreading von der Hardware unterstützt,  indem z. B. mehrere Prozessorkerne die Thread-Abarbeitung parallelisieren oder indem ein Multithreaded Prozessor vorliegt. Ein Multithreaded Prozessor  kann mehrere Threads gleichzeitig abarbeiten. Dazu besitzt ein Thread einen eigenen Registersatz mit Stackpointer und Befehlszähler (Programcounter, Befehlszählregister). Häufige Thread-Wechsel  bewirken beim hardwareseitigen Multithreading sogar eine Steigerung der Performance, da Konflikte in den Pipelines der Prozessoren (Pipeline Hazards) reduziert werden können.  Multithreading-Prozessoren können unterschiedliche Strategien für die Aufteilung und Einlastung der Threads bzw. deren paralleler Verarbeitung anwenden:
1. Switch-By-Event: Ereignisse welchen einen Thread-Wechsel auslösen. 
2. Time-Slices: jedem Thread wird eine bestimmte Zeitspanne zugewiesen.
3. Simultaneous Multithreading (SMT). 

Thread
Grundsätzlich ist zu unterscheiden zwischen Prozess, Kernel-Thread und User-Thread. Ab ca. 1995 unterstützen die meisten Betriebssysteme alle 3 Kategorien.  Moderne Prozessoren sind i.d.R. mehrfädig, d.h. sie unterstützen hardwareseitiges Multithreading.                       
Siehe auch:    Multitasking   Pipeline-Architektur   Simultaneous-Multithreading   Hyper-Threading   SMP   Superskalar   Thread   Pentium-4   Dual-Core   NetBurst