# Datenfluss

DynamicNodes als Programmiersystem basiert auf dem Datenflussprinzip. Um zu verdeutlichen welche Gedanken dem zugrunde liegen, soll das Datenflussprinzip einmal mit der Von-Neumann-Architektur (VNA) verglichen werden.

Die VNA ist die Grundlage für die x86-CPUs und steckt somit in allen PCs. Bei der VNA gibt es eine Steuer- und eine Recheneinheit. Beide zusammen bilden den Prozessor. Dieser ist mit einem Arbeitsspeicher verbunden, welcher sowohl Befehle als auch Daten enthält. Die Steuereinheit lädt Befehle und Daten aus dem Arbeitsspeicher, verarbeitet die Daten indem die Befehle von der Recheneinheit ausgeführt werden und schreibt die Ergebnisse in den Arbeitsspeicher zurück. Dabei werden die Befehle nacheinander abgearbeitet. Neben den normalen Rechenbefehlen gibt es Sprungbefehle, die die Steuereinheit anweisen den Programmablauf an einer anderen Stelle des sequentiellen Programmablaufs fortzusetzen. Im Normalfall ist davon auszugehen, dass ein nachfolgender Befehl Ergebnisdaten eines vorangegangenen Befehls benötigt. Deshalb ist es nicht einfach möglich mehrere Befehle parallel auszuführen.

Das Datenflussprinzip unterteilt ein Programm in Operationsknoten. Knoten können durch gerichtete Verbindungen mit anderen Knoten verbunden sein. Ein solches Netz von verbundenen Knoten wird auch Flussgraph genannt. Dabei repräsentiert eine Verbindung sowohl eine Abhängigkeit als auch einen Transportweg für Daten. Denn über die Verbindungen werden Daten transportiert und von Knoten verarbeitet. Durch diese Struktur können viele Knoten parallel arbeiten, weil genau definiert ist welche Daten ein Knoten als Eingabe zum Arbeiten benötigt und welche er wieder ausgibt. Einen Arbeitsspeicher, auf dem alle Knoten schreiben können wie bei der VNA, gibt es nicht.

Ein einfacher Flussgraph

Das Datenflussprinzip hat sowohl Vor- als auch Nachteile gegenüber der VNA. Allerdings hängen diese stark von der jeweiligen Anwendung ab. Ein Nachteil des Datenflussprinzips ist es beispielsweise, dass Schleifen i.d.R. nicht so einfach realisiert werden können wie bei der üblichen Programmierung auf der VNA. Ein Vorteil ist hingegen, dass die Struktur eines Datenflussprogramms für den Menschen leichter verständlich ist.

Datenflusskonzepte werden auf verschiedenen Abstraktionsniveaus angewendet. Das Spektrum reicht von Datenflusshardware bis zu Flusskonzepten in der groben Struktur (Architektur) von Anwendungen. DynamicNodes setzt mit dem Datenflussprinzip auf einer mittleren Ebene an, versucht aber gleichzeitig ein möglichst breites Spektrum der verschiedenen Abstraktionsebenen der Softwareentwicklung abzudecken. Das bedeutet, dass Operationsknoten in DynamicNodes sowohl primitive Operationen wie z.B. eine Addition realisieren können, aber auch ganze Softwarekomponenten.

DynamicNodes läuft auf normaler PC-Hardware und bildet demzufolge eine Art Brücke zwischen der klassischen (prozeduralen, objektorientierten) Programmierung für die VNA und dem Datenflussprinzip. Dazu werden Operationsknoten in einer klassischen Programmiersprache entwickelt und können quasi als Miniprogramme auf PC-Hardware ausgeführt werden. Anschließend müssen die Knoten zu einem Flussgraphen kombiniert werden und können erst dann eine sinnvolle Aufgabe erfüllen.

Zusätzlich zu den Knoten gibt es eine Laufzeitumgebung, die ebenfalls in einer klassischen Programmiersprache implementiert ist und die Kommunikation zwischen den Knoten ermöglicht. Somit ist DynamicNodes seitens der Hardware normaler Programmcode für die VNA, seitens des Benutzers hingegen eine datenflussorientierte Programmierumgebung.