======================================================================
=                              Dataflow                              =
======================================================================

                            Introduction
======================================================================
'Dataflow' is a term used in computing which has various meanings
depending on application and the context in which the term is used. In
the context of software architecture, data flow relates to stream
processing or reactive programming.


                       Software architecture
======================================================================
Dataflow is a software paradigm based on the idea of disconnecting
computational actors into stages (pipelines) that can execute
concurrently. Dataflow can also be called stream processing or
reactive programming.

There have been multiple data-flow/stream processing languages of
various forms (see Stream processing). Data-flow hardware (see
Dataflow architecture) is an alternative to the classic Von Neumann
architecture. The most obvious example of data-flow programming is the
subset known as reactive programming with spreadsheets. As a user
enters new values, they are instantly transmitted to the next logical
"actor" or formula for calculation.

Distributed data flows have also been proposed as a programming
abstraction that captures the dynamics of distributed multi-protocols.
The data-centric perspective characteristic of data flow programming
promotes high-level functional specifications and simplifies formal
reasoning about system components.


                       Hardware architecture
======================================================================
Hardware architectures for dataflow was a major topic in Computer
architecture research in the 1970s and early 1980s. Jack Dennis of MIT
pioneered the field of static dataflow architectures. Designs that use
conventional memory addresses as data dependency tags are called
static dataflow machines. These machines did not allow multiple
instances of the same routines to be executed simultaneously because
the simple tags could not differentiate between them. Designs that use
Content-addressable memory are called dynamic dataflow machines by
Arvind. They use tags in memory to facilitate parallelism.
Data flows around the computer through the components of the computer.
It gets entered from the input devices and can leave through output
devices (printer etc.).


                            Concurrency
======================================================================
A dataflow network is a network of concurrently executing processes or
automata that can communicate by sending data over 'channels' (see
message passing.)

In Kahn process networks, named after Gilles Kahn, the processes are
'determinate'. This implies that each determinate process computes a
continuous function from input streams to output streams, and that a
network of determinate processes is itself determinate, thus computing
a continuous function. This implies that the behavior of such networks
can be described by a set of recursive equations, which can be solved
using fixed point theory. The movement and transformation of the data
is represented by a series of shapes and lines.


                              See also
======================================================================
* BMDFM
* Communicating Sequential Processes
* Complex event processing
* Data flow diagram
* Data-flow analysis, a type of program analysis
* Data stream
* Dataflow programming (a programming language paradigm)
* Flow-based programming (FBP)
* Functional reactive programming
* Lazy evaluation
* Lucid (programming language)
* Oz (programming language)
* Packet flow
* Pipeline (computing)
* Pure Data
* TensorFlow
* Theano


License
=========
All content on Gopherpedia comes from Wikipedia, and is licensed under CC-BY-SA
License URL: http://creativecommons.org/licenses/by-sa/3.0/
Original Article: http://en.wikipedia.org/wiki/Dataflow