Parallelität (oder mindestens der Eindruck davon) wird immer auf dieselbe Art erreicht: mehrere Programme befinden sich gleichzeitig im (physikalischen) Hauptspeicher eines Computers. Wir gehen zunächst einmal davon aus, dass der Computer nur über einen Mikroprozessor verfügt. Dann kann nämlich nur ein Programm zu einem bestimmten Zeitpunkt aktiv sein (= die Kontrolle haben). Alle anderen Programme sind schlafen gelegt.
Wenn nun schnell genug zwischen den Programmen hin und her geschaltet wird, entsteht der Eindruck, als ob sie gleichzeitig ablaufen würden. Das Umschalten kann auf zwei Arten erreicht werden:
Das preemptive Verfahren garantiert ein faireres Umschalten zwischen den Programmen. Der Eindruck der Parallelität ist auch sanfter und ruckfreier. Natürlich ist es einem Programm auch hier nicht verboten die Kontrolle freiwillig abzugeben bevor es vom Scheduler unterbrochen wird. Prinzipiell sollte ein Programm nie warten, sondern immer die Kontrolle abgegeben. So wird nie ein Programm unnötig eine Warteschleife abarbeiten, während andere - die noch Arbeit hätten - schlafen.
Die Speicherverwaltung von parallel ablaufenden Programmen soll hier nicht unerwähnt bleiben. Wie der Speicher verwaltet wird, hat zwar nichts mit der Parallelität zu tun, jedoch mit Sicherheit. Wenn mehrere Programme gleichzeitig im Speicher sind, so kann es immer wieder vorkommen, dass absichtlich oder unabsichtlich die Programme sich gegenseitig den Speicher "kaputtschreiben". Zum Beispiel ist es möglich, dass ein Programm beginnt den Speicherbereich zu löschen, in dem ein anderes Programm steht. Um dies zu verhindern, wird bei manchen Betriebssystemen der physikalische Speicher in mehrere logische Speicher aufgeteilt. Jedes einzelne Programm erhält dadurch den Eindruck, ganz alleine über den gesamten Speicher zu bestimmen. Natürlich ist eine solche Speicherverwaltung aufwendig und bremst das Umschalten zwischen den Programmen stark.
Wie schon erwähnt, sind die Umschaltverfahren völlig unabhängig von der Speicherverwaltung Tabelle 1 gibt einen Überblick über die verschiedenen Kombinationsmöglichkeiten. Die hier aufgeführten Begriffe werden zum Teil auch synonym oder mit leicht anderer Bedeutung verwendet. In dieser Werkstatt jedoch halten wir uns an die unten gegebenen Bedeutungen.
Scheduling \ Speicher | gemeinsam | getrennt |
---|---|---|
kooperativ | Multitasking | - |
preemptiv | Multithreading | Multiprocessing |
Tabelle 1: Parallelitätsarten
Parallelität - Threads in Java - Tips und Hinweise - Lösungsmöglichkeit
OOP - Werkzeuge - Referenzen - Fäden - Synchronisation - Applets - Dokumentation
Werkstatt - Bibliographie