function_node
a接受continue_msg
输入和 a之间的区别在于continue_node
接收消息时的行为。这是“依赖图”概念的结果。
依赖图的思想是图传递的唯一信息是任务的完成。如果您有四个任务(A、B、C、D)都在相同的共享数据上运行,并且任务 A 和 B 必须在 C 或 D 可以启动之前完成,您定义四个continue_nodes
,并附加节点 A 的输出到 C 和 D,对于 B 也是如此。您也可以创建 abroadcast_node<continue_msg>
并将 A 和 B 附加到它的后继。(计算中使用的数据必须可以通过其他方式访问。)
要开始图表,您try_put
对. 将a 发送给每个后继者(A 和 B)。continue_msg
broadcast_node
broadcast_node
continue_msg
continue_nodes
A 和 B 各有 1 个前驱(broadcast_node
.)在接收到continue_msgs
等于其前驱计数 (1) 的数量时,它们将排队执行、使用和更新表示计算状态的数据。
当continue_node
A 完成时,它会向continue_msg
每个后继节点 C 和 D 发送一个。这些节点每个都有两个前驱节点,因此它们在收到此消息时不会执行。他们只记得他们收到了一条消息。
当continue_node
B 完成时,它还会向continue_msg
C 和 D 发送 a。这将是continue_msg
每个节点接收到的第二个,因此任务将排队执行它们的 function_bodies。
continue_nodes
仅使用图表来表达此顺序。没有数据从节点传输到节点(除了前驱完成的信号。)
如果图中的节点function_nodes
接受continue_msgs
而不是continue_nodes
,则对broadcast_node
获得 a的反应continue_msg
将是
- 将
broadcast_node
a 转发continue_msg
给 A 和 B,它们将各自执行其 function_bodies。
- 节点 A 将完成,并传递
continue_msgs
给 C 和 D。
- 收到 后
continue_msg
,任务将排队执行 C 和 D 的函数体。
- 节点 B 将完成执行,并将 a 转发
continue_msg
给 C 和 D。
- C 和 D 在接收到第二个 continue_msg 后,会将任务排队以第二次执行其 function_bodies。
注意 3. 上面。function_node
每次continue_msg
收到. 知道它有continue_node
多少个前置任务,并且只有在它收到的数量continue_msgs
等于它的前置任务数量时才会做出反应。
如果在计算中使用了很多状态,并且如果任务序列很好理解,则依赖图很方便。“共享状态”的概念并不一定要求使用依赖图,但依赖图只能传递所涉及工作的完成状态,因此必须使用共享状态来传递其他数据。
(请注意,我在上面描述的完成顺序只是一种可能的顺序。节点 B 可以在节点 A 之前完成,但操作顺序类似。)