Nebenläufigkeit

Eigenschaft eines Systems, mehrere Berechnungen, Anweisungen oder Befehle gleichzeitig ausführen zu können

Die Nebenläufigkeit, mitunter auch Parallelität (englisch concurrency) genannt, ist in der Informatik die Eigenschaft eines Systems, mehrere Berechnungen, Anweisungen oder Befehle gleichzeitig ausführen zu können. Es kann sich dabei um völlig unabhängige Anweisungen handeln, bis hin zur gemeinsamen Bearbeitung einer Aufgabe. Sie können dabei auch miteinander interagieren (z. B. um Zwischenergebnisse auszutauschen).

Beim Philosophenproblem (engl. Dining Philosophers Problem) handelt es sich um ein Fallbeispiel aus dem Bereich der Theoretischen Informatik.

Die Operationen können dabei nur scheinbar nebenläufig (parallel), im sogenannten präemptiven Multitasking, auf einem Prozessor ausgeführt werden oder auch echt nebenläufig auf

Die Grenze zum Parallelrechner im eigentlichen Sinne ist bei den Ansätzen zur echten Parallelität fließend.

Nebenläufige Prozesse können u. a. durch Petri-Netze oder Parallel Random Access Machines beschrieben und analysiert werden.

Engere BegriffsauffassungBearbeiten

Mitunter wird auch exakter unterschieden zwischen „nebenläufiger Behandlung“ (englisch concurrency) und „Parallelverarbeitung“ (englisch parallelism): Die nebenläufigen Behandlung wird dann vor allem als ein Konzept verstanden, reale Vorgänge abzubilden, das auch sinnvoll ist, wenn zur Ausführung nur ein einziger CPU-Kern zur Verfügung steht; im Gegensatz dazu fokussiert in diesem Begriffsverständnis die Parallelverarbeitung auf echt-gleichzeitige Mehrkern-Berechnung meist eines Problems.[1]

Parallelisierbarkeit und SerialisierbarkeitBearbeiten

Sind Ablaufschritte so voneinander abhängig, dass sie in einer festen Reihenfolge nacheinander ausgeführt werden müssen, sodass es nicht möglich ist, sie nebenläufig auszuführen, dann sind sie nicht parallelisierbar. Müssen Abläufe echt-gleichzeitig stattfinden, so dass es absolut keine Möglichkeit gibt, sie nacheinander auszuführen, so sind sie nicht serialisierbar.

Die Parallelisierbarkeit zweier oder mehrerer Abschnitte oder Iterationen eines Ablaufs oder von Ereignissen ist die Beurteilung, ob diese nebenläufig ausgeführt/berechnet werden können, ohne zu einem abweichenden Resultat zu führen.

„Aktionen können nebenläufig ausgeführt werden, wenn keine das Resultat des anderen benötigt.“

Wolfgang Schröder-Preikschat: Vortrag „Systemprogrammierung: Prozesssynchronisation: Nichtsequentialität“[2]

Die Programmabschnitte dürfen also nicht kausal voneinander abhängen. Anders ausgedrückt sind mehrere Transaktionen oder Prozesse/Threads genau dann parallelisierbar, wenn die parallele, verzahnte oder in umgekehrter Reihenfolge stattfindende Ausführung zum selben Resultat führt wie das sequentielle Ausführen.

Sind die Programmabschnitte (teilweise) voneinander abhängig, so müssen sie bezüglich dieser Abhängigkeiten synchronisiert werden, was eine Sequentialisierung (bzgl. dieser Abhängigkeit) bewirkt.

„Viele praxisrelevante Probleme besitzen Lösungsverfahren, die direkt in einen parallelen Algorithmus umgesetzt werden können. Man sagt in diesem Fall, daß das Problem eine natürliche Parallelität besitzt.“

B. Monien, J. Schulze, S. Grothklags: „Parallele Algorithmen“[3]

Verfahren zur Parallelisierung sind[4]

  • Binärbaummethode,
  • list ranking,
  • pointer doubling,
  • parallel prefix,
  • symmetry breaking.

Siehe auchBearbeiten

LiteraturBearbeiten

  • Peter Ziesche: Nebenläufige & verteilte Programmierung. W3L, 2004, ISBN 3-937137-04-1.
  • 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.

EinzelnachweiseBearbeiten

  1. Rob Pike: 'Concurrency Is Not Parallelism', Youtube, 20. Oktober 2013
  2. Systemprogrammierung, Prozesssynchronisation: Nichtsequentialität, Wolfgang Schröder-Preikschat, Lehrstuhl Informatik 4, 6. November 2013
  3. Parallele Algorithmen“, B. Monien, J. Schulze, S. Grothklags, Skriptum Uni Paderborn, 2001 (mit umfangreichem Literaturverzeichnis)
  4. Spezialvorlesung "Parallele Algorithmen", Uni Potsdam, Didaktik der Informatik