Parallelität (Informatik)

Das "Dining -Philosophen", ein klassisches Problem mit Parallelität und gemeinsamen Ressourcen

Im Informatik, Parallelität ist die Fähigkeit verschiedener Teile oder Einheiten von a Programm, Algorithmus, oder Problem sein hingerichtet außerordentlich oder in Teilreihenfolge, ohne das Endergebnis zu beeinflussen. Dies erlaubt parallel Ausführung der gleichzeitigen Einheiten, die die Gesamtgeschwindigkeit der Ausführung erheblich verbessern können Mehrprozessor und Multi-Core Systeme. In mehr technischer Hinsicht bezieht sich die Parallelität auf die Zersetzbarkeit eines Programms, eines Algorithmus oder eines Problems in bestellungsunabhängige oder teilweise geordnete Komponenten oder Berechnungseinheiten.[1]

Entsprechend Rob Pike, Parallelität ist die Zusammensetzung der unabhängigen Ausführung von Berechnungen,[2] Und Parallelität ist keine Parallelität: Bei Gleichzeitigkeit geht es darum, mit vielen Dingen gleichzeitig umzugehen, aber in Parallelität geht es darum, viele Dinge gleichzeitig zu tun. Bei der Parallelität geht es um Struktur, Parallelität geht um Ausführung, Gleichzeitigkeit bietet eine Möglichkeit, eine Lösung zu strukturieren, um ein Problem zu lösen, das (aber nicht unbedingt) parallelisierbar sein kann.[3]

Für die allgemeine gleichzeitige Berechnung wurde eine Reihe mathematischer Modelle entwickelt, einschließlich der allgemeinen gleichzeitigen Berechnung Petri Nets, Prozesskalkül, das Parallele Zufallszugriffsmaschine Modell, die Schauspielermodell und die Reo Coordination Language.

Geschichte

Wie Leslie Lamport (2015) stellt fest, "während gleichzeitiges Programm Die Ausführung war seit Jahren in Betracht gezogen, die Informatik der Parallelität begann mit Edsger Dijkstra's wegweisende Papier von 1965, in dem die vorgestellt wurde gegenseitiger Ausschluss Problem. ... Die folgenden Jahrzehnte haben ein großes Wachstum von Interesse an Parallelität - insbesondere in verteilte Systeme. Wenn man auf die Ursprünge des Feldes zurückblickt, ist die grundlegende Rolle, die Edsger Dijkstra spielt.[4]

Ausgaben

Da Berechnungen in einem gleichzeitigen System während der Ausführung miteinander interagieren können, kann die Anzahl der möglichen Ausführungspfade im System extrem groß sein, und das resultierende Ergebnis kann sein unbestimmt. Gleichzeitige Verwendung von gemeinsam genutzten Gebrauch Ressourcen kann eine Quelle der Unbestimmtheit sein, die zu Themen wie z. Deadlocks, und Ressourcenhunger.[5]

Das Design von gleichzeitigen Systemen beinhaltet häufig das Finden zuverlässiger Techniken zur Koordinierung ihrer Ausführung, Datenaustausch, Speicherzuweisungund Ausführungsplanung, um zu minimieren Reaktionszeit und maximieren Durchsatz.[6]

Theorie

Die Gleichzeittheorie war ein aktives Forschungsbereich in Theoretische Informatik. Einer der ersten Vorschläge war Carl Adam Petri'S wegweisende Arbeit an Petri Nets In den frühen 1960er Jahren. In den Jahren seitdem wurde eine Vielzahl von Formalismen entwickelt, um die Parallelität zu modellieren und zu argumentieren.

Modelle

Es wurden eine Reihe von Formalismen zum Modellieren und Verständnis von gleichzeitigen Systemen entwickelt, darunter:[7]

Einige dieser Modelle der Parallelität sollen in erster Linie Argumentation und Spezifikation unterstützen, während andere im gesamten Entwicklungszyklus verwendet werden können, einschließlich Design, Implementierung, Beweis, Test und Simulation gleichzeitiger Systeme. Einige davon basieren auf Nachrichtenübergang, während andere unterschiedliche Mechanismen für die Parallelität haben.

Die Verbreitung verschiedener Modelle der Parallelität hat einige Forscher motiviert, Wege zu entwickeln, um diese verschiedenen theoretischen Modelle zu vereinheitlichen. Zum Beispiel haben Lee und Sangiovanni-vincentelli gezeigt, dass ein sogenanntes "Tagged-Signal" -Modell verwendet werden kann, um einen gemeinsamen Rahmen für die Definition des Denotationssemantik einer Vielzahl verschiedener Modelle der Parallelität,[9] Während Nielsen, Sasson und Winkel das gezeigt haben Kategoriestheorie Kann verwendet werden, um ein ähnliches einheitliches Verständnis verschiedener Modelle zu vermitteln.[10]

Der Theorem der Parallelitätsrepräsentation im Akteurmodell bietet eine ziemlich allgemeine Möglichkeit, gleichzeitige Systeme darzustellen, die in dem Sinne geschlossen sind, dass sie keine Mitteilungen von außen erhalten. (Andere Parallelitätssysteme, z. B.,, Prozesskalkül kann im Schauspielermodell mit a modelliert werden Zweiphasen-Commit-Protokoll.[11]) Die durch ein geschlossenes System bezeichnete mathematische Bezeichnung S wird immer bessere Annäherungen aus einem anfänglichen Verhalten aufgebaut, das genannt wird S Verwenden eines Verhaltens angenähte die Funktion FortschreitenS eine Bezeichnung (Bedeutung) zu konstruieren S folgendermaßen:[12]

BezeichnenS ≡ ⊔i∈ω FortschreitenSi(⊥S)

Auf diese Weise, S kann mathematisch in Bezug auf all seine möglichen Verhaltensweisen charakterisiert werden.

Logik

Verschiedene Arten von zeitliche Logik[13] Kann verwendet werden, um die Vernunft für gleichzeitige Systeme zu unterstützen. Einige dieser Logiken, wie z. lineare zeitliche Logik und Berechnungsbaumlogik, Ermöglichen Sie, dass Aussagen über die Sequenzen von Zuständen erfolgen, die ein gleichzeitiges System durchlaufen können. Andere, wie z. B. Aktion Computerbaumlogik, Hennessy -Milner -Logik, und Lamports zeitliche Logik der Aktionenbauen Sie ihre Behauptungen aus Sequenzen von auf Aktionen (Änderungen im Zustand). Die Hauptanwendung dieser Logik ist schriftlich Spezifikationen für gleichzeitige Systeme.[5]

Trainieren

Gleichzeitige Programmierung umfasst Programmiersprachen und Algorithmen zur Implementierung gleichzeitiger Systeme. Die gleichzeitige Programmierung wird normalerweise als allgemeiner angesehen als Parallele Programmierung Da es willkürliche und dynamische Kommunikations- und Interaktionsmuster beinhalten kann, während parallele Systeme im Allgemeinen ein vordefiniertes und gut strukturiertes Kommunikationsmuster aufweisen. Zu den Grundzielen der gleichzeitigen Programmierung gehören Richtigkeit, Leistung und Robustheit. Gleichzeitige Systeme wie z. Betriebssysteme und Datenbankmanagementsystem sind im Allgemeinen so konzipiert, dass sie auf unbestimmte Zeit arbeiten, einschließlich der automatischen Wiederherstellung vom Versagen und nicht unerwartet enden (siehe Parallelitätskontrolle). Einige gleichzeitige Systeme implementieren eine Form der transparenten Parallelität, bei der gleichzeitige rechnerische Einheiten um eine einzige Ressource konkurrieren und sie teilen können, aber die Komplexität dieses Wettbewerbs und der Teilen werden vom Programmierer abgeschirmt.

Da sie gemeinsame Ressourcen verwenden, erfordern gleichzeitige Systeme im Allgemeinen die Aufnahme einer Art von einer Art Schiedsrichter Irgendwo in ihrer Implementierung (oft in der zugrunde liegenden Hardware), um den Zugriff auf diese Ressourcen zu steuern. Die Verwendung von Schiedsrichtern führt die Möglichkeit von Unbestimmtheit bei gleichzeitiger Berechnung Dies hat erhebliche Auswirkungen auf die Praxis, einschließlich Korrektheit und Leistung. Zum Beispiel führt die Schiedsverfahren ein Unbefragter Nichtdeterminismus das wirft Probleme mit Modellprüfung Weil es Explosion im Zustandsraum verursacht und sogar Modelle dazu veranlassen kann, eine unendliche Anzahl von Zuständen zu haben.

Einige gleichzeitige Programmiermodelle umfassen Koprozesse und deterministische Parallelität. In diesen Modellen kontrollieren Fäden explizit Ertrag ihre Zeitstrahlen, entweder zum System oder zu einem anderen Prozess.

Siehe auch

Verweise

  1. ^ LaMport, Leslie (Juli 1978). "Zeit, Uhren und die Bestellung von Ereignissen in einem verteilten System" (PDF). Kommunikation der ACM. 21 (7): 558–565. doi:10.1145/359545.359563. S2CID 215822405. Abgerufen 4. Februar 2016.
  2. ^ "Gehen Sie Parallelitätsmuster". realks.golang.org. Abgerufen 2021-04-08.
  3. ^ "Parallelität ist keine Parallelität". realks.golang.org. Abgerufen 2021-04-08.
  4. ^ Lamport, Leslie. "Turing Lecture: Die Informatik der Parallelität: Die frühen Jahre (Kommunikation von The ACM, Band 58 Nr. 6, Juni 2015)". ACM. Abgerufen 22. März 2017.
  5. ^ a b Cleaveland, Rance; Scott Smolka (Dezember 1996). "Strategische Richtungen in der Parallelitätsforschung". ACM Computing -Umfragen. 28 (4): 607. doi:10.1145/242223.242252. S2CID 13264261.
  6. ^ Campbell, Colin; Johnson, Ralph; Miller, Ade; Toub, Stephen (August 2010). Parallele Programmierung mit Microsoft .net. Microsoft Press. ISBN 978-0-7356-5159-3.
  7. ^ Filman, Robert; Daniel Friedman (1984). Koordiniertes Computer - Tools und Techniken für verteilte Software. McGraw-Hill. ISBN 978-0-07-022439-1.
  8. ^ Keller, Jörg; Christoph Keßler; Jesper Träff (2001). Praktische Kinderwagenprogrammierung. John Wiley und Söhne.
  9. ^ Lee, Edward; Alberto Sangiovanni-vincentelli (Dezember 1998). "Ein Rahmen zum Vergleichen von Berechnungsmodellen" (PDF). IEEE -Transaktionen auf CAD. 17 (12): 1217–1229. doi:10.1109/43.736561.
  10. ^ Mogens Nielsen; Vladimiro Sassone; Glynn Winkel (1993). "Beziehungen zwischen Modellen der Parallelität". Rex School/Symposium.
  11. ^ Frederick Knabe. Ein verteiltes Protokoll für die kanalbasierte Kommunikation mit Choice Parle 1992.
  12. ^ William Cler (Juni 1981). "Grundlagen der Schauspielersemantik". Mathematik -Dissertation. MIT. HDL:1721.1/6935. {{}}: Journal zitieren erfordert |journal= (Hilfe)
  13. ^ Roscoe, Colin (2001). Modale und zeitliche Eigenschaften von Prozessen. Springer. ISBN 978-0-387-98717-0.

Weitere Lektüre

  • Lynch, Nancy A. (1996). Verteilte Algorithmen. Morgan Kaufmann. ISBN 978-1-55860-348-6.
  • Tanenbaum, Andrew S.; Van Steen, Maarten (2002). Verteilte Systeme: Prinzipien und Paradigmen. Prentice Hall. ISBN 978-0-13-088893-8.
  • Kurki-suonio, Reino (2005). Eine praktische Theorie von reaktiven Systemen. Springer. ISBN 978-3-540-23342-8.
  • Garg, Vijay K. (2002). Elemente des verteilten Computers. Wiley-ieee Press. ISBN 978-0-471-03600-5.
  • Magee, Jeff; Kramer, Jeff (2006). Parallelität: Zustandsmodelle und Java -Programmierung. Wiley. ISBN 978-0-470-09355-9.
  • Distefano, S. & Bruneo, D. (2015). Quantitative Bewertungen verteilter Systeme: Methoden und Techniken (1. Aufl.). Somerset: John Wiley & Sons Inc. ISBN9781119131144
  • Bhattacharyya, S. S. (2013; 2014;). Handbuch von Signalverarbeitungssystemen (Zweite; 2; 2. 2013; Hrsg.). New York, NY: Springer.10.1007/978-1-4614-6859-2 ISBN9781461468592
  • Wolter, K. (2012; 2014;). Resilienzbewertung und Bewertung von Computersystemen (1. Aufl.; 1; ed.). London; Berlin;: Springer. ISBN9783642290329

Externe Links