1.. _Flow_Graph_Message_Passing_Protocol:
2
3Flow Graph Basics: Message Passing Protocol
4===========================================
5
6
7|full_name| flow graph operates by passing
8messages between nodes. A node may not be able to receive and process a
9message from its predecessor. For a graph to operate most-efficiently,
10if this occurs the state of the edge between the nodes can change its
11state to pull so when the successor is able to handle a message it can
12query its predecessor to see if a message is available. If the edge did
13not reverse from push to pull, the predecessor node would have to
14repeatedly attempt to forward its message until the successor accepts
15it. This would consume resources needlessly.
16
17
18Once the edge is in pull mode, when the successor is not busy, it will
19try to pull a message from a predecessor.
20
21
22#. If a predecessor has a message, the successor will process it and the
23   edge will remain in pull mode.
24#. If the predecessor has no message, the edge between the nodes will
25   switch from pull to push mode.
26
27
28The state diagram of this Push-Pull protocol is:
29
30
31.. container:: fignone
32   :name: basic_push_pull
33
34
35   **The dynamic push / pull protocol.**
36
37
38   .. container:: imagecenter
39
40
41      |image0|
42
43
44.. |image0| image:: Images/flow_graph_message_passing_protocol.jpg
45   :width: 442px
46   :height: 196px
47
48