Strukturierte Parallelität

Strukturierte Parallelität ist ein Programmierparadigma Ziel, die Klarheit, Qualität und Entwicklungszeit von a zu verbessern Computer Programm durch Verwendung eines strukturierten Ansatzes zu gleichzeitige Programmierung.

Das Kernkonzept ist die Einkapselung gleichzeitiger Ausführungsthreads (hier umfassen Kernel- und Userland -Threads und -prozesse) durch Kontrollflusskonstrukte, die eindeutige Einstiegs- und Ausgangspunkte haben und sicherstellen, dass alle abgelaufenen Threads vor dem Beenden abgeschlossen sind. Eine solche Einkapselung ermöglicht es, Fehler in gleichzeitigen Threads an den übergeordneten Umfang der Kontrollstruktur zu verbreiten und durch die nativen Fehlerbehandlungsmechanismen der einzelnen Computersprache zu verwalten. Es ermöglicht den Steuerfluss trotz der Parallelität durch die Struktur des Quellcodes leicht zu erkennen. Um effektiv zu sein, muss dieses Modell auf allen Ebenen des Programms konsistent angewendet werden - ansonsten können gleichzeitige Threads auslaufen, verwaist werden oder keine Laufzeitfehler korrekt ausbreitet.

Strukturierte Parallelität ist analog zu Strukturierte Programmierung, die Steuerflusskonstrukte einführte, die sequentielle Anweisungen und Subroutinen eingekapselt haben.

Geschichte

Das Fork -Join -Modell Ab den 1960er Jahren, verkörpert durch Multiprozesentools wie OpenMP, ist ein frühes Beispiel für ein System, das sicherstellt, dass alle Threads vor dem Beenden abgeschlossen sind. Smith argumentiert jedoch, dass dieses Modell keine wahre strukturierte Parallelität ist, da die Programmiersprache das Verbindungsverhalten nicht bewusst ist und somit nicht in der Lage ist, die Sicherheit durchzusetzen.[1]

Das Konzept wurde 2016 von Martin Sústrik (Schöpfer von ZeroMQ) mit seiner C -Bibliothek libdill mit Goroutinen als Ausgangspunkt.[2] Es wurde 2018 von Nathaniel J. Smith weiter verfeinert, der in seinem ein "Kindergartenmuster" einführte Python Implementierung namens Trio.[1] In der Zwischenzeit stieß Roman Elizarov unabhängig auf die gleichen Ideen, während er ein experimentelles entwickelte Coroutine Bibliothek für die Kotlin -Sprache,[3][4] was später zu einer Standardbibliothek wurde.[5]

Im Jahr 2021, Schnell angenommen strukturierte Parallelität.[6] Später in diesem Jahr wurde ein Entwurfsvorschlag veröffentlicht, um strukturierte Parallelität zu hinzufügen Java.[7]

Variationen

Ein Hauptvariationspunkt ist, wie ein Fehler in einem Mitglied eines gleichzeitigen Fadenbaums behandelt wird. Einfache Implementierungen warten lediglich, bis die Kinder und Geschwister des fehlerhaften Threads bis zur Fertigstellung ausgeführt werden, bevor sie den Fehler in den übergeordneten Bereich ausbreiten. Dies könnte jedoch unbestimmte Zeit in Anspruch nehmen. Die Alternative besteht darin, einen allgemeinen Stornierungsmechanismus (typischerweise ein kooperatives System zu ermöglichen, mit dem Programminvarianten geehrt werden können), um die Kinder und Geschwisterfäden zweckmäßig zu beenden.

Siehe auch

Verweise

  1. ^ a b Smith, Nathaniel J. (25. April 2018). "Anmerkungen zur strukturierten Parallelität oder: Go -Erklärung gilt als schädlich". Abgerufen 1. August 2019.
  2. ^ Sústrik, Martin (7. Februar 2016). "Strukturierte Parallelität". Abgerufen 1. August 2019.
  3. ^ Elizarov, Roman (12. September 2018). "Strukturierte Parallelität". Abgerufen 21. September 2019.
  4. ^ Elizarov, Roman (11. Juli 2019). Strukturierte Parallelität (Video). Hydra Distributed Computing Conference. 42 Minuten in. Abgerufen 21. September 2019. Wir brauchten einen Namen und wir mussten dieses ganze Konzept [...] abschließen und stolpern auf diesen Blog -Beitrag [...] von Nathaniel J. Smith.
  5. ^ "Coroutines -Grundlagen: Strukturierte Parallelität". Kotlin. Jetbrains. Abgerufen 3. März 2022.
  6. ^ McCall, John; Groff, Joe; Gregor, Doug; Malawski, Konrad. "Swift Structured Concurrency Vorschlag". Apples Swift Evolution Repo. Github. Abgerufen 3. März 2022.
  7. ^ Pressler, Ron. "JEP -Entwurf: Strukturierte Parallelität (Inkubator)". OpenJDK. Orakel. Abgerufen 3. März 2022.

Externe Links