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

Die Nebenläufigkeit, mitunter auch Parallelität (englisch concurrency) genannt, ist in der Informatik die Eigenschaft eines Systems, mehrere Aufgaben, 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).

Die Operationen können dabei nur scheinbar nebenläufig (parallel), beispielsweise im sogenannten Multitasking, auf einem Prozessor ausgeführt werden oder auch echt nebenläufig, beispielsweise auf einem Mehrkernprozessor oder auf einem Rechnerverbund bestehend aus mehreren getrennten und über ein Netzwerk verbundenen Computern. 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 Parallel Random Access Machines, Message passing oder Petri-Netze beschrieben und analysiert werden.

Engere Begriffsauffassung

Bearbeiten

Mitunter wird auch exakter unterschieden zwischen „nebenläufiger Behandlung“ (englisch concurrency) und „Parallelverarbeitung“ (englisch parallelism): Die nebenläufige 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 Serialisierbarkeit

Bearbeiten

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,
  • Gebietszerlegung (engl. domain decomposition).

Ein modernes Anwendungsbeispiel für Parallelisierbarkeit findet sich in der Distributed-Ledger-Technologie. Während klassische Blockchains Transaktionen oft sequentiell ordnen ("Total Order"), nutzen neuere Ansätze wie das Cerberus-Protokoll partiell geordnete Graphen. Da Transaktionen, die unterschiedliche Objekte ("Assets") betreffen, nicht kausal voneinander abhängen, können diese echt-nebenläufig verarbeitet werden, was theoretisch eine lineare Skalierbarkeit ermöglicht.[5]

Siehe auch

Bearbeiten

Literatur

Bearbeiten
  • 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.

Einzelnachweise

Bearbeiten
  1. Rob Pike: 'Concurrency Is Not Parallelism', Youtube, 15. Oktober 2023.
  2. Wolfgang Schröder-Preikschat: Systemprogrammierung, Prozesssynchronisation: Nichtsequentialität. (PDF) In: Lehrstuhl Informatik 4. Friedrich-Alexander-Universität Erlangen-Nürnberg, 6. November 2013, abgerufen am 28. Dezember 2025.
  3. B. Monien, J. Schulze, S. Grothklags: Parallele Algorithmen. (Skriptum) Uni Paderborn, 2001, abgerufen am 28. Dezember 2025 (mit umfangreichem Literaturverzeichnis).
  4. Spezialvorlesung „Parallele Algorithmen“. Uni Potsdam, Didaktik der Informatik, abgerufen am 28. Dezember 2025.
  5. Jelle Hellings, Daniel P. Hughes, Joshua Primero, Mohammad Sadoghi: Cerberus: Minimalistic Multi-shard Byzantine-resilient Transaction Processing. In: Proceedings of the VLDB Endowment. 10. August 2020, doi:10.48550/arXiv.2008.04450 (arxiv.org [PDF]).

📚 Artikel Terkait di Wikipedia

Parallele Algorithmen für das Erfüllbarkeitsproblem

umgekehrt. Daraus folgt, dass parallel ausgeführte Algorithmen vom Erlernen der Klauseln der jeweils anderen Algorithmen profitieren können. Dieser Ansatz

Spannbaum

unterschiedliche Ansätze zur parallelen Berechnung. Ein anderes Verfahren ist der Algorithmus von Chazelle. Neben den oben genannten Algorithmen gibt es viele weitere

Paralleler Algorithmus

kann. Jeder parallele Algorithmus kann auch sequentiell abgearbeitet werden. Umgekehrt sind auch viele bekannte sequentielle Algorithmen parallelisierbar

Mergesort

Array */ algorithm parallelMultiwayMergesort(d : Array, n : int, p : int) is o := new Array[0, n] // the output array for i = 1 to p do in parallel // each

Parallele Programmierung

Quelltext führen kann. Ein Nachteil ist, dass das Laufzeitverhalten paralleler Algorithmen schwieriger nachvollziehbar sein kann als das eines äquivalenten

Algorithmus von Prim

Jarnik, Prim und Dijkstra, im englischen Sprachraum auch Jarnik’s algorithm oder DJP algorithm. Der Algorithmus beginnt mit einem trivialen Graphen T {\displaystyle

Lastverteilung (Informatik)

Sanders Peter, Dietzfelbinger Martin, Dementiev Roman: Sequential and Parallel Algorithms and Data Structures: The Basic Toolbox. Springer, 2019, ISBN 978-3-030-25209-0

Komplexitätstheorie

eines Schaltkreises oder die Anzahl benötigter Prozessoren bei parallelen Algorithmen. Die Komplexität eines Problems ist wiederum die Komplexität desjenigen