Next: Zweistufige Thread-Implementierungen
Up: Threads
Previous: Threads auf Anwendungsebene
  Inhalt
Threads als leichtgewichtige Prozesse
Die Vorteile nebenläufiger Programmierung werden nicht erst in
Implementierungen moderner Programmiersprachen genutzt. Das
Thread-Konzept der Ausführung mehrerer nebenläufiger Aktivitäten auf
einem gemeinsamen Adreßraum wird von vielen Betriebssystemen seit
langem bereits im Kern unterstützt und Anwendungsprogrammen durch
entsprechende Systemschnittstellen angeboten.
Es liegt daher nahe, jeden Programmiersprachen-Thread mit Hilfe jeweils
eines LWP zu implementieren, eine sogenannte ,,1:1-Implementierung``.
Mehrere Gründe sprechen dafür:
- Einfache Implementierung
- Die Implementierung eines Schedulers
kann entfallen, da dieser vom Betriebssystem bereitgestellt wird.
- Multiprozessorfähigkeit
- Die Ressource ,,Prozessor`` wird vom
Betriebssystem verwaltet. Nur durch Nutzung mehrerer LWP kann dem
Betriebssystem die Nebenläufigkeit der Applikation kommuniziert und
die parallele Ausführung auf mehreren Prozessoren veranlaßt werden.
Eine Implementierung im user space verhält sich dem
Betriebssystem gegenüber wie eine nicht nebenläufige Anwendung und
kann daher nicht parallel ausgeführt werden.
- Blockierende Systemaufrufe
- Vor allem Ein-Ausgaberoutinen des
Betriebssystems können mit Blockiersemantik versehen sein. Man
spricht auch von synchroner Ein- und Ausgabe. Das bedeutet, ein
I/O-Aufruf kehrt so lange nicht zurück, bis die Operation beendet
wurde. Das Betriebssystem sorgt dafür, daß hierbei nur der LWP
blockiert, der die I/O-Operation durchführt. Eine Implementierung im
user space muß statt dessen blockierende I/O-Operationen
mit Hilfe nichtblockierender Betriebssystemfunktionen simulieren, da
ansonsten der gesamte Prozeß mit allen Threads blockieren würde.
Dies ist aufwendig zu implementieren und geht zur Lasten der
Effizienz.
Parallelität kann nur durch die Verwendung von LWP erreicht werden, da
allein das Betriebssystem Kontrolle über Prozessorvergabe und
blockierende I/O-Operationen besitzt. Demgegenüber stehen hohe Kosten
für Transitionen vom user space in den kernel space,
die die VM-Performanz belasten, sowie Limitationen der Skalierbarkeit.
Next: Zweistufige Thread-Implementierungen
Up: Threads
Previous: Threads auf Anwendungsebene
  Inhalt
2001-02-28