Ο όρος **ροή δεδομένων** (**Dataflow**) χρησιμοποιείται στην πληροφορική και έχει διάφορες σημασίες. Έχει στενή σχέση με το πέρασμα μηνυμάτων.

Αρχιτεκτονική λογισμικού
------------------------

Η **ροή δεδομένων** είναι μια αρχιτεκτονική λογισμικού που βασίζεται στην ιδέα ότι η τροποποίηση της τιμής μιας μεταβλητής πρέπει αυτόματα να επιβάλλει τον υπολογισμό από την αρχή όλων των μεταβλητών που εξαρτώνται από αυτήν.

Ο προγραμματισμός ροής δεδομένων ενσωματώνει αυτές τις αρχές, με τα λογιστικά φύλλα να αποτελούν το πιο γνωστό παράδειγμα εφαρμογής του. Για παράδειγμα, σε ένα λογιστικό φύλλο μπορεί να οριστεί ένας τύπος σε ένα κελί που να εξαρτάται από άλλα κελιά, ώστε όταν οποιοδήποτε από αυτά αλλάξει τιμή, αυτόματα να υπολογίζεται πάλι η τιμή του πρώτου κελιού. Είναι πιθανό μια αλλαγή να δημιουργήσει μια ολόκληρη ακολουθία από αλλαγές, καθώς ένα κελί μπορεί να εξαρτάται από ένα άλλο κελί, το οποίο να εξαρτάται από ένα άλλο κελί, κλπ.

Η τεχνική ροής δεδομένων δεν περιορίζεται στον επανυπολογισμό αριθμητικών τιμών, όπως περιγράφηκε παραπάνω. Για παράδειγμα, η ροή δεδομένων μπορεί να χρησιμοποιηθεί για να επανασχεδιαστεί μια εικόνα ανάλογα με τις κινήσεις του ποντικιού, ή να κάνει στροφή ένα ρομπότ αποκρινόμενο σε αλλαγές του επιπέδου του φωτός.

Ένα πλεονέκτημα της ροής δεδομένων είναι ότι μπορεί να μειώσει την ποσότητα του κώδικα σε ένα πρόγραμμα που χειρίζεται τις εξαρτήσεις μεταξύ δεδομένων. Για παράδειγμα, χωρίς τη ροή δεδομένων, αν μια μεταβλητή Y εξαρτάται από μια μεταβλητή X, τότε όταν η X αλλάζει, η Y πρέπει να υπολογιστεί πάλι. Αυτό σημαίνει ότι η Y είναι συνδεδεμένη με τη X και ότι η λειτουργία της ανανέωσης πρέπει να υπάρχει ρητά στο πρόγραμμα με την πρόσθεση ελέγχου που να αποφεύγει τις κυκλικές εξαρτήσεις. Η ροή δεδομένων βελτιώνει αυτήν την κατάσταση αυτοματοποιώντας τον επανυπολογισμό της Y, αφαιρώντας τη σύνδεση από τη X στην Y. Η ροή δεδομένων κρύβει αρκετούς υπολογισμούς που σε άλλα προγραμματιστικά παραδείγματα πρέπει να εκφράζονται ρητά.

Η ροή δεδομένων συχνά επίσης αναφέρεται και ως αντιδραστικός προγραμματισμός (reactive programming).

Υπάρχουν αρκετές γλώσσες προγραμματισμού που δημιουργήθηκαν ειδικά για να υποστηρίζουν τη ροή δεδομένων. Επιπλέον, πολλές (αν όχι οι πιο πολλές) οπτικές γλώσσες προγραμματισμού έχουν βασιστεί στην ιδέα της ροής δεδομένων.

Οι κατανεμημένες ροές δεδομένων έχουν επίσης προταθεί σαν προγραμματιστική αφαίρεση που συλλαμβάνει τη δυναμική των κατανεμημένων πολυ-πρωτοκόλλων (distributed multi-protocols). Η έμφαση στα δεδομένα που είναι χαρακτηριστικό του προγραμματισμού ροής δεδομένων ενθαρρύνει ένα υψηλού επιπέδου συναρτησιακό στυλ για τη συγγραφή των προδιαγραφών (specifications) και απλοποιεί την τυπική ανάλυση των μονάδων ενός συστήματος.

Αρχιτεκτονική υλικού
--------------------

Κύριο λήμμα: Αρχιτεκτονική ροής δεδομένων
Οι αρχιτεκτονικές ροής δεδομένων ήταν ένα σημαντικό θέμα της έρευνας της αρχιτεκτονικής υπολογιστών στη δεκαετία του 1970 και στις αρχές της δεκαετίας του 1980. Ο Jack Dennis του MIT υπήρξε από τους πρωτεργάτες του πεδίου των αρχιτεκτονικών στατικής ροής δεδομένων (static dataflow). Ο όρος υπολογιστές στατικής ροής δεδομένων αναφέρεται σε μοντέλα που χρησιμοποιούν συμβατικές διευθύνσεις μνήμης σαν ετικέτες εξαρτήσεων δεδομένων (data dependency tags). Αυτοί οι υπολογιστές δεν επέτρεπαν πολλαπλά στιγμιότυπα της ίδιας ρουτίνας να εκτελούνται ταυτόχρονα γιατί οι ετικέτες αυτές δε μπορούσαν να κάνουν το διαχωρισμό μεταξύ αυτών των στιγμιοτύπων. Τα μοντέλα που χρησιμοποιούν μνήμη διευθύνσεων περιεχομένων (content-addressable memory) ονομάζονται υπολογιστές δυναμικής ροής δεδομένων (κατά τον Arvind). Για να διευκολύνουν τον παραλληλισμό χρησιμοποιούν ετικέτες στη μνήμη.

Ταυτοχρονισμός
--------------

Ένα δίκτυο ρής δεδομένων είναι ένα δίκτυο από διεργασίες που εκτελούνται ταυτόχρονα ή από αυτόματα που μπορούν να επικοινωνούν στέλνοντας δεδομένα μέσω *καναλιών* (*channels*), για περισσότερες πληροφορίες δείτε πέρασμα μηνυμάτων. 

Στα δίκτυα διεργασιών Kahn, τα οποία πήραν το όνομά τους από τον Gilles Kahn, οι διεργασίες ονομάζονται *ορισμένες* (*determinate*). Αυτό σημαίνει ότι κάθε ορισμένη διεργασία υπολογίζει μια συνεχή συνάρτηση από ροές εισόδου σε ροές εξόδου, και ότι το δίκτυο των ορισμένων διεργασιών είναι το ίδιο ορισμένο, δηλαδή υπολογίζει μια συνεχή συνάρτηση. Συνέπεια των παραπάνω είναι ότι η συμπεριφορά αυτών των δικτύων μπορεί να περιγραφεί από ένα σύνολο αναδρομικών εξισώσεων, που μπορούν να επιλυθούν με τη χρήση της θεωρίας σταθερού σημείου. Η κίνηση και ο μετασχηματισμός των δεδομένων αναπαρίσταται από μια σειρά από σχήματα και γραμμές.

Δείτε επίσης
------------

* Προγραμματισμός ροής δεδομένων
* Οκνηρή αποτίμηση
* Complex event processing
* Pure Data
* Προγραμματισμός βασισμένος σε ροές (Flow-based programming, FBP)
* Functional reactive programming
* Γλώσσα προγραμματισμού Oz
* Γλώσσα προγραμματισμού Lucid
* Ροή πακέτων
* Ροή σημάτων
* Γράφος ροής σημάτων
* Ανάλυση ροής δεδομένων

Εξωτερικοί σύνδεσμοι
--------------------

* BMDFM: Binary Modular Dataflow Machine, BMDFM. (Αγγλικά)
* Cantata: Οπτική Γλώσσα Ροής Δεδομένων για επεξεργασία εικόνας. (Αγγλικά)
* Cells: Dataflow extension to Common Lisp Object System, CLOS. (Αγγλικά)
* KPASSA : a tool for static-scheduling, performance analysis and optimizations for DataFlow models. (Αγγλικά)
* Liquid Rebol Αρχειοθετήθηκε 2011-07-15 στο Wayback Machine. (Αγγλικά)
* NuParadigm. (Αγγλικά)
* Ruby Dataflow : Ruby gem που προσθέτει την υποστήριξη μεταβλητών ροής δεδομένων. (Αγγλικά)
* Acar et al, Adaptive Functional Programming, POPL 2002. (Αγγλικά)