Hyper-Threading: Optimierungen und Fallen
Pingpong Resümee
Das gezeigte Beispiel stellt einen Härtefall für die Thread-Kommunikation dar: Die Nutzlast, das Inkrementieren einer Variablen, ist im Vergleich zum Aufwand für die Synchronisation gering. Zudem wird nur die Extremsituation betrachtet, dass zwei Threads sich gegenseitig den Ball zuwerfen müssen und nie gleichzeitig arbeiten dürfen. In der Praxis sind die Auswirkungen daher normalerweise geringer, aber in ähnlicher Form dennoch vorhanden.
Ohne Hyper-Threading | Mit Hyper-Threading | |
---|---|---|
Gemessen mit Pentium 4 3,06 GHz unter Windows XP | ||
Leere Warteschleife | 11 | 8.557.000 |
Mit Sleep(0) | 1.253.000 | 2.392.000 |
Mit Pause-Instruction | 11 | 51.058.000 |
Auf einer Single-CPU-Maschine muss immer das Betriebssystem mit einem Sleep bemüht werden, wenn Threads sich schnell abwechseln müssen. Bemerkenswerterweise ist dieser Weg - zumindest bei geringen Workloads - die schlechteste Wahl für Hyper-Threading-Systeme.
Am besten ist es, derart geringe Workloads zu vermeiden und den Threads genügend Arbeit für einige zig Mikrosekunden mitzugeben. Ist dies möglich, spielt der Overhead zur Synchronisation keine Rolle mehr.