next up previous contents
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 up previous contents
Next: Zweistufige Thread-Implementierungen Up: Threads Previous: Threads auf Anwendungsebene   Inhalt

2001-02-28