next up previous contents
Next: Threads und Synchronisierung in Up: Komponenten virtueller Maschinen Previous: Zusammenfassung   Inhalt


Nebenläufigkeit

Nebenläufige Programmverarbeitung ist in vielen unterschiedlichen Inkarnationen in Programmiersprachen vorhanden. In einem nebenläufigen Programm werden mehrere Kontrollflüsse erzeugt, die potentiell gleichzeitig ausgeführt werden können. Findet die Ausführung tatsächlich gleichzeitig statt, so spricht man von Parallelität [Butenhof, 1997]. Während in deklarativen Programmiersprachen die Nebenläufigkeit einzelner Programmteile oftmals abgeleitet werden kann, z.B. durch die Konfluenzeigenschaft referentiell transparenter funktionaler Sprachen [Peyton Jones, 1989], geschieht dies in imperativen Sprachen explizit durch den Programmierer.

Die erzeugten Kontrollflüsse sind oftmals nur partiell unabhängig voneinander, so daß sie an definierten Punkten untereinander synchronisiert werden müssen. Dies ist z.B. notwendig, wenn eine Aktivität das Ergebnis einer anderen zur Weiterverarbeitung benötigt. Um nebenläufige Programme zu ermöglichen, muß eine Programmiersprache daher mindestens folgende zwei Konstrukte anbieten: Definition nebenläufiger Aktivitäten und deren Synchronisierung.

Grundsätzlich werden zwei Argumente für den Einsatz von Nebenläufigkeit angeführt [Butenhof, 1997]:

Wir werden sehen, daß für beide Modelle eine mehr oder weniger ,,kanonische`` Implementierung existiert. Diese beiden ,,Auslegungen`` wirken in unterschiedlichen Systemebenen und weisen daher unterschiedliche Charakteristika bezüglich ihrer Performanz und Skalierbarkeit auf. Eine der entscheidenden Kennzahlen ist hierbei die Zahl der unterstützten nebenläufigen Aktivitäten. Diese ist im ersten Fall durch die Problemgröße definiert, während im zweiten Fall die Hardwarekonfiguration die Grenze zieht.

Im Folgenden wird gezeigt, welche Abstraktionen zur nebenläufigen Programmierung in Java in Form von Threads, Monitoren und einem Speichermodell zur Verfügung stehen. Die Besonderheiten des Java-Modells und ihre Implikationen für die Sprachimplementierung werden dargelegt. Interaktionspunkte mit anderen Komponenten des Laufzeitsystems werden aufgezeigt. Damit wird der Grundstein gelegt für das Verständnis der Techniken in Kapitel 5, das konkrete Detailfragen und Implementierungen diskutiert.




next up previous contents
Next: Threads und Synchronisierung in Up: Komponenten virtueller Maschinen Previous: Zusammenfassung   Inhalt

2001-02-28