Nichtsequentielle Programmierung

Nichtsequentielle Programmierung
Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf mit, ihn zu verbessern, und entferne anschließend diese Markierung.

Parallele Programmierung ist ein Programmierparadigma. Damit ist gemeint, ein Computerprogramm so in einzelne Teilstücke aufzuteilen, dass sie gleichzeitig oder nebenläufig ausgeführt werden können.

Inhaltsverzeichnis

Umsetzung

Das kann explizit geschehen, zum Beispiel dadurch, dass der Programmierer Programmteile in separaten Prozessen oder Threads ausführen lässt, oder es geschieht automatisch, so dass kausal unabhängige (nebenläufige) Anweisungsfolgen "nebeneinander" ausgeführt werden. Diese automatische Parallelisierung kann durch den Compiler vorgenommen werden, wenn als Zielplattform ein Parallelrechner zur Verfügung steht, aber auch einige moderne CPUs können solche Unabhängigkeiten erkennen und die Anweisungen so auf verschiedene Teile des Prozessors verteilen, dass sie gleichzeitig ausgeführt werden (Pipeline-Architektur).

Es ist aus der Sicht des Programmierers bei der Parallelisierung im allgemeinen gleichgültig, ob die einzelnen Programmteile tatsächlich gleichzeitig von unabhängigen Ausführungseinheiten bearbeitet werden, oder ob sie nur quasi-parallel ausgeführt werden (siehe Time-Sharing, Multitasking).

Bei der Parallelen Programmierung verwendet man den weniger strengen Begriff der Nebenläufigkeit, bei dem der Programmcode nicht streng hintereinander, sondern parallel ausgeführt wird. Zwei Transaktionen, Prozesse oder Threads sind genau dann parallelisierbar, wenn die parallele, verzahnte oder verdrehte Ausführung zum selben Resultat führt wie das sequentielle Ausführen. (Parallelisierbarkeit).

Die Nebenläufigkeit von mehreren unabhängigen Prozessen bezeichnet man als Multitasking; Nebenläufigkeit innerhalb eines Prozesses als Multithreading. In den Frühzeiten der Computerentwicklung waren auch reine Time-Sharing-Systeme weit verbreitet, die eine Nebenläufigkeit auf Benutzerebene ermöglichten.

Konflikte

Sobald die einzelnen Prozesse oder Threads aber untereinander kommunizieren, sind sie streng genommen nicht mehr als Ganzes nebenläufig (sie beeinflussen sich ja) – nur noch einzelne Teilabläufe sind zueinander nebenläufig. Wenn nun die Reihenfolge der Ausführung der Kontaktpunkte (oder Kommunikationspunkte) nicht entsprechend vorgegeben ist, können sich daraus Konflikte ergeben, insbesondere eine so genannte Verklemmung (deadlock), wenn zwei Abläufe gegenseitig aufeinander warten (bzw. sich gegenseitig blockieren). Zur Lösung dieser Problematik werden verschiedene Techniken herangezogen:

Der Kontext jedes Programmteils muss vor unerwarteter Veränderung durch andere Teile geschützt werden (Synchronisierung). Soll ein gemeinsamer Zugriff auf Daten realisiert werden, dann muss der Zugriff synchronisiert werden, z. B. durch gegenseitigen Ausschluss (Mutex) unter Benutzung von Monitoren oder von Semaphoren. Alternativ kann auch verlangt werden, dass bestimmte Aktionen von zwei Prozessen gemeinsam ausgeführt werden, mit so genannten Rendezvous. Eine weitere sichere Art der Kommunikation sind Warteschlangen. Diese Techniken lösen das Problem des gleichzeitigen Zugriffs auf Ressourcen, verhindern jedoch keine Verklemmungen (ganz im Gegenteil).

Besonders wichtig sind solche Techniken in verteilten Systemen, vor allem um die Integrität von verteilten Transaktionen zu gewährleisten.

Effizienz

Auf Einprozessorsystemen führt parallele Programmierung nur dann zu einer Verkürzung der effektiven Ausführungszeit, wenn die einzelnen Threads bzw. Prozesse sehr wenig Zeit mit Warten verbringen (z. B. sollte die Blockierung an einem Lock oder Monitor nicht lange dauern). Aufgrund des zusätzlichen Verwaltungsaufwandes ergeben sich zum Teil sogar Geschwindigkeitsnachteile. Um parallele Programmierung voll auszunutzen, sind mehrere Ausführungseinheiten nötig. Techniken dafür sind Simultaneous Multithreading (SMT), z. B. Hyper-Threading Technology (HTT), Symmetrisches Multiprocessing (SMP), z. B. mittels Multicore-Prozessor oder mehrerer CPUs. Den Extremfall bildet das Massively Parallel Processing (MPP) mit zum Teil mehreren tausend Prozessoren. Verbreitet sind auch ganze Verbünde von Einzelrechnern zum parallelen Berechnen einzusetzen (Computercluster).

Auf der anderen Seite sollte möglichst wenig Kontrollcode zu Koordination der Threads vorhanden sein, falls dieser nur sequentiell ausgeführt werden kann. Dieser Sachverhalt ist Ergebnis des Amdahlschen Gesetz über die Parallelisierungseigenschaften von Programmen.

Siehe auch

Literatur

  • Peter Ziesche: Nebenläufige & verteilte Programmierung, W3L, 2004, ISBN 3937137041
  • Douglas Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann: Pattern-orientierte Softwarearchitektur, Muster für nebenläufige und vernetzte Objekte, dpunkt 2002, ISBN 3-89864-142-2
  • M. Ben-Ari: Grundlagen der Parallel-Programmierung, 1984, ISBN 3-446-14155-3
  • Dietrich Boles: Parallele Programmierung spielend gelernt mit dem Java-Hamster-Modell - Programmierung mit Java-Threads. Vieweg+Teubner-Verlag, 2008, ISBN 978-3-8351-0229-3

Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Load-Link/Store-Conditional — (LL/SC) (engl. etwa „Referenz Laden/bedingt Schreiben“) ist ein Paar von Prozessor Befehlen, die eine read modify write Operation implementieren. Der LL Befehl lädt eine Speicherstelle, ihr Inhalt kann verändert werden, und der SC Befehl schreibt …   Deutsch Wikipedia

  • Prozessynchronisation — In der Programmierung meint man mit Prozesssynchronisation (oder kurz einfach Synchronisation) die Koordinierung des zeitlichen Ablaufs mehrerer nebenläufiger Prozesse bzw. Threads. Dabei ist es unerheblich, ob es sich um Threads in einem… …   Deutsch Wikipedia

  • Gegenseitiger Ausschluss — Der Begriff Wechselseitiger Ausschluss bzw. Mutex (Abk. für engl. mutual exclusion, auf deutsch etwa wechselseitiger Ausschluss) bezeichnet eine Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird. Mutex Verfahren… …   Deutsch Wikipedia

  • Wechselseitiger Ausschluss — Der Begriff Wechselseitiger Ausschluss bzw. Mutex (Abk. für engl. mutual exclusion, auf deutsch etwa wechselseitiger Ausschluss) bezeichnet eine Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird. Mutex Verfahren… …   Deutsch Wikipedia

  • Warteschlangenmodell — Ein Wartesystem (engl.: waiting or queuing system) ist in der Warteschlangentheorie ein abstraktes Modell eines Bedienungssystems, das den verkehrsmäßigen Ablauf innerhalb realer Systeme wie Nachrichtennetzen oder Computernetzwerken beschreibt.… …   Deutsch Wikipedia

  • Mutex — Der Begriff Wechselseitiger Ausschluss bzw. Mutex (Abk. für engl. mutual exclusion) bezeichnet eine Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird. Mutex Verfahren verhindern, dass nebenläufige Prozesse bzw.… …   Deutsch Wikipedia

  • Compare-and-swap — (CAS) (engl. für „Vergleichen und Tauschen“) Instruktionen werden in der Informatik verwendet, um Locking und Synchronisationsoperationen zu implementieren. Eine Speicherstelle wird mit einem vorgegebenen Wert verglichen, und bei Übereinstimmung… …   Deutsch Wikipedia

  • Nicht-blockierende Synchronisation — (engl. non blocking oder auch lock free synchronization) ist eine Technik in der Informatik, um parallele Prozesse zu synchronisieren, ohne dabei bestimmte Programmabschnitte sperren zu müssen. Insbesondere dient sie zur Implementierung von nicht …   Deutsch Wikipedia

  • Prozesssynchronisation — In der Programmierung versteht man unter Prozesssynchronisation (oder kurz einfach Synchronisation) die Koordinierung des zeitlichen Ablaufs mehrerer nebenläufiger Prozesse bzw. Threads. Dabei ist es unerheblich, ob es sich um Threads in einem… …   Deutsch Wikipedia

  • Wartesystem — Ein Wartesystem (engl.: waiting or queuing system) ist in der Warteschlangentheorie ein abstraktes Modell eines Bedienungssystems, das den verkehrsmäßigen Ablauf innerhalb realer Systeme wie Nachrichtennetzen oder Computernetzwerken beschreibt.… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”