function_nodea接受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_msgbroadcast_nodebroadcast_nodecontinue_msg
continue_nodesA 和 B 各有 1 个前驱(broadcast_node.)在接收到continue_msgs等于其前驱计数 (1) 的数量时,它们将排队执行、使用和更新表示计算状态的数据。
当continue_nodeA 完成时,它会向continue_msg每个后继节点 C 和 D 发送一个。这些节点每个都有两个前驱节点,因此它们在收到此消息时不会执行。他们只记得他们收到了一条消息。
当continue_nodeB 完成时,它还会向continue_msgC 和 D 发送 a。这将是continue_msg每个节点接收到的第二个,因此任务将排队执行它们的 function_bodies。
continue_nodes仅使用图表来表达此顺序。没有数据从节点传输到节点(除了前驱完成的信号。)
如果图中的节点function_nodes接受continue_msgs而不是continue_nodes,则对broadcast_node获得 a的反应continue_msg将是
- 将
broadcast_nodea 转发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 之前完成,但操作顺序类似。)