Multithreading-Modelle
- Mehrere Kombinationen aus UL- und KL-Threads möglich
- UL-Threads: alle UL-Threads einem einzigen KL-Thread zugeordnet (many-to-one), Threadverwaltung durch die Laufzeitumgebung
- KL-Threads: keine Laufzeitumgebung nötig, Verwaltung der Threads durch das BS
- Hybrid: Zuordnung mehrerer UL- zu mehreren KL-Threads (many-to-many)
User-Level (Many-to-One)
!300
- KL-Thread als Träger für UL-Threads
- Vorteile:
- Scheduling-Algorithmus beliebig
- Sehr schnelle Verwaltung
- Nachteile:
- Blockierender Systemaufruf blockiert alle UL-Threads
- Nicht geeignet für Multicore (BS kann nur einen KL-Thread einer CPU zuordnen)
Kernel-Level (One-to-One)
!300
- Direkte Verwendung von KL-Threads bzw. Abbildung jedes UL-Threads auf genau einen KL-Thread
- Vorteile: blockierende Systemaufrufe ohne Einfluss auf übrige Threads → mehrere Threads parallel
- Nachteile: Verwaltung (Erzeugen, Umschalten, …) von Threads ähnlich aufwendig wie entsprechende Prozessoperationen, nur ohne Adressraumwechsel
- Beispiele: Windows, Linux
Hybrid (Many-to-Many)
!300
- Mehrere UL-Threads auf gleich viele/weniger KL-Threads
- Anzahl der KL-Threads wird durch die Anwendung oder in Abhängigkeit von Zielhardware (z.B. Anzahl CPUs) bestimmt
- Kompromiss zwischen Modellen
- Keine Blockierung durch Systemaufrufe
- Parallele UL-Threads partiell möglich
- Keine Beschränkung der Threadanzahl
- Komplexe Randfälle (z.B. Ablauf der Zeitscheibe während des Wechsels zwischen zwei UL-Threads)