A data flow network is the name given to multiple
nodes connected together forming a network that understands a certain protocol.
This protocol includes initialization, processing and connection methods.
A network simply a collection of nodes. It must have an input node and
an output node. To get the output from the network, we must ask its output
node to get the output of the nodes its connected to, and these output
nodes ask to their connected inputs to output the result and so on. So,
in other terms, we are pulling the output from the node that will pull
its its inputs' outputs, etc. The "getOutput" requests propagates until
they reache the first node of a path and then each node of the stacked
getOutput requests computes their outputs. It seems a little bit
complicated, but it works the way a resursive function works by stacking
the requests. See the graphical representation
of the pull technology.
The goal of the network is to accomplish a certain task by connecting small specific nodes that do a part of the processing together to build a complete processing sequence. That way, any node can be interchanged and modified easily and new algorithms can be created (connecting nodes in a different way) without compiling and building a new executable. All we need is pre-defined nodes with known inputs and outputs and a syntax for connecting them together that a parser can understand.
In addition to the processing nodes themselves, we added condition nodes and decision nodes that can enable and disable processing paths depending if a certain condition is met of not. That way, we can build much more intelligent networks that only process useful things according to decision rules.
To synchronize all those nodes, we must use a sequence
number (or a processing number) to make sure the node returns the required
output. This number is useful because a node could cache its outputs and
outputs of the past (a sequence number lower than the current) can be asked.
Instead of processing the request again it only has to return the cached
output associated with this sequence number. By default, each node has
a cache of size 1. It means it caches the result of the current sequence.
If the same sequence number is asked more than one time, the node only
has to return (for the Nth time != 1) the cached output without reprocessing.
![]() |
|
This is a simple example of of the Pull technology we are using.
The Pull Network Demonstration |
||
Network: SAMPLE_NET
{ /* We are assuming that NODE1 and NODE2 have an input named INPUT and an output named OUTPUT */ <node: NODE1> <type: NODE1_TYPE> <node: NODE2> <type: NODE2_TYPE>
} |
||
|