Datenflow -Programmierung

Im Computerprogrammierung, Datenflow -Programmierung ist ein Programmierparadigma Das modelliert ein Programm als gerichteter Graph der Daten, die zwischen den Operationen fließen und so implementieren Datenfluss Prinzipien und Architektur. Datenfluss Programmiersprachen Teilen Sie einige Funktionen von Funktionssprachenund wurden im Allgemeinen entwickelt, um einige funktionale Konzepte in eine Sprache zu bringen, die eher für die numerische Verarbeitung geeignet sind. Einige Autoren verwenden den Begriff Datenstrom Anstatt von Datenfluss Um Verwirrung mit DataFlow Computing zu vermeiden oder DataFlow -Architekturbasierend auf einem indeterministischen Maschinenparadigma. Die Datenflow -Programmierung wurde von Pionierarbeit von Pionierarbeit Jack Dennis und seine Doktoranden am MIT in den 1960er Jahren.

Eigenschaften von DataFlow -Programmiersprachen

Traditionell wird ein Programm als eine Reihe von Operationen in einer bestimmten Reihenfolge modelliert. Dies kann als sequentiell bezeichnet werden,[1]: S.3 prozedural,[2] Steuerfluss[2] (Angeben, dass das Programm einen bestimmten Weg wählt) oder Imperative Programmierung. Das Programm konzentriert sich auf Befehle im Einklang mit dem von Neumann[1]: S.3 Vision der sequentiellen Programmierung, bei der Daten normalerweise "in Ruhe" sind.[2]: S.7

Im Gegensatz dazu betont die DataFlow -Programmierung die Bewegung von Daten- und Modelsprogrammen als eine Reihe von Verbindungen. Explizit definierte Eingänge und Ausgänge verbinden Vorgänge, die wie wie möglich funktionieren Schwarze Kisten.[2]: S.2 Eine Operation wird ausgeführt, sobald alle Eingaben gültig werden.[3] Daher sind Datenflowsprachen von Natur aus parallel und können in großen, dezentralen Systemen gut funktionieren.[1]: S.3[4] [5]

Bundesland

Eines der Schlüsselkonzepte in der Computerprogrammierung ist die Idee von Zustandim Wesentlichen ein Schnappschuss verschiedener Bedingungen im System. Die meisten Programmiersprachen erfordern eine beträchtliche Menge an staatlichen Informationen, die im Allgemeinen dem Programmierer verborgen sind. Oft hat der Computer selbst keine Ahnung, welches Informationen den dauerhaften Zustand codiert. Dies ist ein schwerwiegendes Problem, da die staatlichen Informationen über mehrere Prozessoren weitergegeben werden müssen Parallelverarbeitung Maschinen. Die meisten Sprachen zwingen den Programmierer, zusätzlichen Code hinzuzufügen, um anzugeben, welche Daten und Teile des Codes für den Zustand wichtig sind. Dieser Code ist sowohl in Bezug auf die Leistung als auch schwer zu lesen oder zu debuggen. Explizite Parallelität ist einer der Hauptgründe für die schlechte Leistung von Enterprise Java Beans beim Erstellen datenintensiver, nichtOLTP Anwendungen.

Wenn sich ein sequentielles Programm als einzelne Arbeiter vorgestellt werden kann, das sich zwischen Aufgaben (Operations) bewegt, ähnelt ein Datenflow -Programm eher eine Reihe von Arbeitnehmern auf einem FließbandJede erledigt eine bestimmte Aufgabe, wenn Materialien verfügbar sind. Da sich die Operationen nur mit der Verfügbarkeit von Dateneingaben befassen, haben sie keinen versteckten Zustand zu verfolgen und sind alle gleichzeitig "bereit".

Darstellung

Datenflow -Programme werden auf unterschiedliche Weise dargestellt. Ein traditionelles Programm wird normalerweise als eine Reihe von Textanweisungen dargestellt, die für die Beschreibung eines seriellen Systems angemessen sind, das Daten zwischen kleinen Einweißtools verleiht, die empfangen, verarbeiten und zurückkehren. DataFlow -Programme beginnen mit einem Eingang, vielleicht der Befehlszeile Parameter und veranschaulichen, wie diese Daten verwendet und geändert werden. Der Datenfluss ist explizit und oft visuell als Linie oder Rohr dargestellt.

In Bezug auf die Codierung könnte ein Datenflow -Programm als implementiert werden Hash-tabellemit einzigartig identifizierten Eingaben als Schlüssel, die zur Überprüfung von Zeigern auf die Anweisungen verwendet werden. Nach Abschluss eines Vorgangs scannt das Programm die Operationsliste, bis der erste Betrieb findet, bei dem alle Eingaben derzeit gültig sind und diese ausführen. Wenn dieser Betrieb beendet ist, wird in der Regel Daten ausgegeben, wodurch ein anderer Vorgang gültig wird.

Für den parallelen Betrieb muss nur die Liste freigegeben werden. Es ist der Zustand des gesamten Programms. Daher wird die Aufgabe des Zustands des Staates vom Programmierer entfernt und der Sprache übergeben Laufzeit. Bei Maschinen mit einem einzelnen Prozessorkern, bei dem eine für den parallelen Betrieb entwickelte Implementierung einfach Overhead einführen würde, kann dieser Overhead mithilfe einer anderen Laufzeit vollständig entfernt werden.

Geschichte

Eine Pionierdatenflow -Sprache war Blodi (Blockdiagramm), entwickelt von John Larry Kelly, Jr., Carol Lochbaum und Victor A. Vyssotsky zum Angeben Abgetastete Datensysteme.[6] Eine Blodi -Spezifikation von funktionalen Einheiten (Verstärker, Addierer, Verzögerungslinien usw.) und deren Zusammenhänge wurde in eine einzelne Schleife zusammengestellt, die das gesamte System für eine Uhr Tick aktualisierte.

In einem 1966er Ph.D. These, Die online grafische Spezifikation von Computerverfahren,[7] Bert Sutherland Erstellt eines der ersten grafischen Datenflow -Programmierrahmen, um die parallele Programmierung zu vereinfachen. Nachfolgende Datenflusssprachen wurden häufig im großen entwickelt Supercomputer Labors. Pogol, eine ansonsten konventionelle Datenverarbeitungssprache bei der Entwicklung NSA, kompilierte groß angelegte Anwendungen, die aus mehreren Operationen mehrerer Datei-zu-Datei bestehen, z. Führen Sie in effizientem Code zusammen, wählen Sie in den effizienten Code, der die Erstellung oder Schreiben in Zwischendateien so weit wie möglich beseitigt.[8] Sisal, eine beliebte Datenflow -Sprache, die entwickelt wurde Lawrence Livermore National Laboratory, sieht aus wie die meisten anerkennenden Sprachen, aber Variablen sollten es sein einmal zugewiesen. Dies erlaubt das Compiler So identifizieren Sie einfach die Eingänge und Ausgänge. Es wurden eine Reihe von Ableger von Sisal entwickelt, einschließlich SACK, Einzelzuweisung c, was versucht, dem Populär so nahe zu bleiben C Programmiersprache wie möglich.

Die United States Navy finanzierte die Entwicklung von ACOs und SPGN (Signal Processing Graph Notation) Anfang der 1980er Jahre. Dies wird heute auf einer Reihe von Plattformen im Feld verwendet.[9]

Ein radikaleres Konzept ist Profil, in denen Programme als Diagramme auf dem Bildschirm konstruiert werden und Variablen vollständig durch Linien ersetzt werden, die Eingänge mit Ausgängen verknüpfen. Übrigens wurde Prographen ursprünglich über die geschrieben Macintosh, die bis zur Einführung der Einführung der Einzelprozessor blieb Daystar Genesis MP in 1996.

Es gibt viele Hardware -Architekturen, die auf die effiziente Implementierung von DataFlow -Programmiermodellen ausgerichtet sind. Die markierte Token -Datenflow -Architektur von MIT wurde von entworfen von Greg Papadopoulos.

Der Datenfluss wurde als Abstraktion zur Angabe des globalen Verhaltens verteilter Systemkomponenten vorgeschlagen: in der Live verteilte Objekte Programmiermodell, Verteilte Datenflüsse werden verwendet, um den Zustand zu speichern und zu kommunizieren, und als solche spielen sie die Rolle analog zu Variablen, Feldern und Parametern in Java-ähnlichen Programmiersprachen.

Sprachen

Zu den DataFlow -Programmiersprachen gehören:

Anwendungsprogrammierschnittstellen

  • Apache -Strahl: Java/Scala SDK, die die Verarbeitung von Streaming (und Batch) mit mehreren unterstützten Ausführungsmotoren vereint (Spark, Flink, Google DataFlow ...)
  • Apache Flink: Java/Scala -Bibliothek, mit der Streaming- (und Stapel-) Berechnungen auf einem verteilten Hadoop -Cluster ausgeführt werden können
  • Systemc: Bibliothek für C ++, hauptsächlich auf das Hardware -Design abzielt.
  • Tensorflow: Eine maschinelle Lernbibliothek basierend auf der Datenflow-Programmierung.

Siehe auch

Verweise

  1. ^ a b c Johnston, Wesley M.; J. R. Paul Hanna; Richard J. Millar (März 2004). "Fortschritte in DataFlow -Programmiersprachen" (PDF). ACM Computing -Umfragen. 36: 1–34. doi:10.1145/1013208.1013209. S2CID 5257722. Abgerufen 15. August 2013.
  2. ^ a b c d e Wadge, William W.; Edward A. Ashcroft (1985). Lucid, die DataFlow -Programmiersprache (illustriert Ed.). Academia Press. ISBN 9780127296500. Abgerufen 15. August 2013.
  3. ^ a b "DATAFLOW -Programmierbasis". Erste Schritte mit Ni -Produkten. National Instruments Corporation. Abgerufen 15. August 2013.
  4. ^ Harter, Richard. "Datenflusssprachen und Programmierung - Teil I". Richard Harters Welt. Archiviert von das Original am 8. Dezember 2015. Abgerufen 15. August 2013.
  5. ^ "Warum Datenflow -Programmiersprachen ideal für die Programmierung paralleler Hardware sind". Multicore -Programmierfundamentals Whitepaper -Serie. National Instruments Corporation. Abgerufen 15. August 2013.
  6. ^ John L. Kelly Jr.; Carol Lochbaum; V. A. Vyssotsky (1961). "Ein Blockdiagramm Compiler". Glockensystemtechnologie. J. 40 (3): 669–678. doi:10.1002/j.1538-7305.1961.tb03236.x.
  7. ^ W. R. Sutherland (1966). "Die Online-grafische Spezifikation von Computerprozeduren". MIT. {{}}: Journal zitieren erfordert |journal= (Hilfe)
  8. ^ Gloria Lambert (1973). "Große Dateiverarbeitung: Pogol". POPL '73: Verfahren des 1. jährlichen ACM Sigact-Sigplan-Symposiums über Prinzipien der Programmiersprachen. ACM. S. 226–234.
  9. ^ Unterwasser akustische Datenverarbeitung, Y.T. Chan

Externe Links