Dataflow programming is a model that is used when conceptualizing and implementing software. The focus of dataflow programming is to center the design of a system on the data that is being processed as opposed to the code that is used to manipulate the information. The result is a system in which the basic computational functions are isolated into small modules known as nodes; these accept some data when a certain state is reached, process the data and push the output back into the control flow of the program, potentially passing the information to another node. This is in contrast to the normal paradigm of imperative programming, in which an immediate list of commands defines the control flow of a program, not the state of the data. There are several uses for programs that are built around a dataflow, including parallel processing, real-time systems and embedded systems.
In implicit programming, which is the most commonly used type of computer programming language, programs often are constructed from flow charts that contain a sequence of function or method calls, with each call branching out to other functions. This type of programming inherently focuses on the procedures that are used to manipulate program data. When dataflow programming is used, the focus is removed from explicit function calls and instead focuses on creating abstract modules that accept data when the data or the program has satisfied or achieved certain conditions. At this point, instead of calling a function, the program design causes the data to flow toward the modules, or nodes, where it potentially enters a stream for processing by multiple nodes.
One abstract example of how dataflow programming operates can be seen when considering how to fill a glass with water from a faucet. An imperative approach would be to generate functions to turn on the water, move the glass to the appropriate spot under the faucet, and then fill the glass with water. Through a dataflow programming example, the faucet instead waits until the cup has been positioned under it to start filling it, and whatever is moving the cup waits until the cup has achieved a certain state, such as full, to remove it from under the faucet. The actual programming mechanisms that change the state of the data are not the immediate concern of the design.
The benefit of dataflow programming is an application or system in which the different nodes can be maneuvered to create entirely unique dataflows without necessarily requiring the relationship to be hardcoded. Additionally, a program that uses dataflow programming is actively prepared to process data at all times, instead of explicitly entering into a state or pattern that locks access or execution by one or more nodes. The design and concept of nodes mean dataflow programming applications can easily be designed for use on distributed systems and parallel processors.