La programación de flujo de datos es un modelo que se utiliza al conceptualizar e implementar software. El enfoque de la programación del flujo de datos es centrar el diseño de un sistema en los datos que se están procesando en contraposición al código que se utiliza para manipular la información. El resultado es un sistema en el que las funciones computacionales básicas se aíslan en pequeños módulos conocidos como nodos; estos aceptan algunos datos cuando se alcanza un cierto estado, procesan los datos y empujan la salida hacia el flujo de control del programa, pasando potencialmente la información a otro nodo. Esto contrasta con el paradigma normal de programación imperativa, en el que una lista inmediata de comandos define el flujo de control de un programa, no el estado de los datos. Hay varios usos para los programas que se construyen alrededor de un flujo de datos, incluido el procesamiento paralelo, los sistemas en tiempo real y los sistemas integrados.
En la programación implícita, que es el tipo de lenguaje de programación de computadoras más comúnmente utilizado, los programas a menudo se construyen a partir de diagramas de flujo que contienen una secuencia de llamadas a funciones o métodos, y cada llamada se ramifica a otras funciones. Este tipo de programación se centra inherentemente en los procedimientos que se utilizan para manipular los datos del programa. Cuando se utiliza la programación de flujo de datos, el enfoque se elimina de las llamadas a funciones explícitas y, en cambio, se enfoca en crear módulos abstractos que aceptan datos cuando los datos o el programa han cumplido o alcanzado ciertas condiciones. En este punto, en lugar de llamar a una función, el diseño del programa hace que los datos fluyan hacia los módulos o nodos, donde potencialmente ingresan a una secuencia para ser procesados por múltiples nodos.
Se puede ver un ejemplo abstracto de cómo funciona la programación de flujo de datos al considerar cómo llenar un vaso con agua de un grifo. Un enfoque imperativo sería generar funciones para abrir el agua, mover el vaso al lugar apropiado debajo del grifo y luego llenar el vaso con agua. A través de un ejemplo de programación de flujo de datos, el grifo espera hasta que la taza se haya colocado debajo de él para comenzar a llenarlo, y lo que sea que esté moviendo la taza espera hasta que la taza haya alcanzado un cierto estado, como lleno, para sacarlo de debajo del grifo. . Los mecanismos de programación reales que cambian el estado de los datos no son la preocupación inmediata del diseño.
El beneficio de la programación del flujo de datos es una aplicación o sistema en el que los diferentes nodos se pueden maniobrar para crear flujos de datos completamente únicos sin requerir necesariamente que la relación esté codificada. Además, un programa que utiliza la programación de flujo de datos está preparado activamente para procesar datos en todo momento, en lugar de entrar explícitamente en un estado o patrón que bloquea el acceso o la ejecución de uno o más nodos. El diseño y el concepto de nodos significan que las aplicaciones de programación de flujo de datos se pueden diseñar fácilmente para su uso en sistemas distribuidos y procesadores paralelos.