A Connection represents the data flow between an output port and an input port and can be represented as an edge in a directed graph. In CGF such a graph is called a Graphlet.
Similar to graphs which can be composed out of subgraphs, a graphlet cannot only be composed out of nodes but also out of other graphlets. To enable this kind of hierarchical composition, a graphlet has a similar interface to a node:
Additionally, a graphlet is described by the following information:
A visualization of a node and a graphlet illustrating the concepts of ports and connections is shown in the graphical UI.
For scheduling the data flow in the graph represents a data dependency. A topological order, in which each nodes passes should be executed, can only be established for a directed acyclic graph. To break potential cycles within the graph some connections might be marked as indirect connections. While these do represent a data flow they don't represent a data dependency for scheduling.
A wire is different from a connection since no actual data transport is implied yet. It solely exists to export a port from a subcomponent to the public interface of the surrounding graphlet. An input port of a graphlet might be connected to one or multiple input ports of subcomponents.
While a connection only describes that data should flow between two endpoint, a Channel provides a specific kind of data transport mechanism (e.g. sockets, shared memory). A single channel can also provide the data transport for more than one connection, e.g. via UDP multicast. The exact type of a channel as well as optional configuration options of the specified transport mechanism are defined by parameters associated with each connection.
Importantly, independent of the selected transport mechanism all memory is owned by the channel to provide efficient communication.