Multicast

When a stream has more than one consumer, a multicast block is used to connect the separate pipelines. This block distributes the producer's resources and actions to the consumers, who are unaware that each other exist. It combines the consumers' resources and actions, making them appear to the producer as a single virtual consumer. The block does not directly provide any mechanisms to safeguard any of its consumers against faulty or malicious behavior in its other consumers. Additional blocks can be used to isolate individual consumer pipelines from others when there are safety or security concerns.

media/image12.png

Once created and connected, no direct interaction by the application with a multicast block is required. It automatically performs the following operations as events arrive from up and downstream:

  • During setup phase:
    • Synchronization:
      • Passes producer synchronization requirements to all consumers.
      • Combines consumer synchronization requirements and passes to producer.
      • Passes producer allocated sync objects to all consumers.
      • Passes sync objects allocated by all consumers to producer.
    • Buffers:
      • Combines lists of element attributes from all consumers into a single list and passes upstream.
      • Passes consolidated packet attribute list to all consumers.
      • Passes allocated packets to all consumers.
  • During streaming phase:
    • Passes available payloads to all consumers.
    • Tracks packets returned for reuse by the consumers and returns them to the producer when all consumers are done with them. All fences are combined into one list.
  • In non-safety builds, during streaming phase:
    • Distributes changes in packet attributes and buffers to all consumers.
Note:

Reallocation of buffers in non-safety builds are not supported in this release.