ZBLOG

6.5. Data-sharing delivery Fast DDS allows to speed up communications between entities within the same machine by sharing the history of the DataWriter with the DataReader through shared memory. This prevents any of the overhead involved in the t...

在 Fast DDS(Fast Data Distribution Service)中,数据共享传递(Data-sharing delivery)是一种通过共享内存来加速同一台机器内的实体之间通信的机制。它允许 DataWriter 将其历史记录与 DataReader 共享,从而避免在传输层面上的开销,有效地防止了 DataWriter 和 DataReader 之间的数据复制。

概述

  • 共享内存使用:当创建 DataWriter 时,Fast DDS 会预先分配一个样本池,这个池中的样本存储在一个共享内存映射文件中。当有新数据发布时,DataWriter 会从这个池中取出一个样本,并将其添加到历史记录中,同时通知 DataReader 哪个样本包含新数据。DataReader 可以访问同一个共享内存映射文件,从而直接获取由 DataWriter 发布的数据。

限制条件

要使用数据共享传递功能,需要满足以下要求:

  1. 共享内存访问:DataWriter 和 DataReader 必须能够访问相同的共享内存。
  2. 话题类型限制:话题必须是有限制的 TopicDataType,即其 is_bounded() 成员函数返回 true。
  3. 无键话题:话题不能是键控的。
  4. 内存配置:DataWriter 必须配置为 PREALLOCATED_MEMORY_MODEPREALLOCATED_WITH_REALLOC_MEMORY_MODE 模式。
  5. 无安全插件:不允许使用安全插件。

另外,对于 DataReader 的 HistoryQos 存在限制。在使用数据共享机制时,DataReader 实际上与 DataWriter 共享历史记录。这意味着有效的 HistoryQos 深度最多只能等于 DataWriter 的 HistoryQos 深度。为了避免混淆,建议将 DataReaders 的历史深度设置为小于或等于 DataWriter 的值。

总结

数据共享交付是一种高效的通信方式,通过减少数据复制和提高数据访问速度,可以显著提高系统性能。然而,它需要特定条件才能实现,因此在设计系统时需要考虑这些限制。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21434

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?