ZBLOG

15.8. Zero-Copy communication This section explains how to configure a Zero-Copy communication in Fast DDS. The Zero-Copy communication allows the transmission of data between applications without copying data in memory, saving time and resources...

15.8. Zero-Copy communication

本节解释了如何在 Fast DDS 中配置零拷贝通信。零拷贝通信允许在应用程序之间传输数据,而无需在内存中复制数据,从而节省时间和资源。为实现这一点,它利用了数据共享交付(Data-sharing delivery)以及应用程序与 Fast DDS 之间的数据缓冲区借用。

15.8.1. Overview

数据共享交付提供了一个通信通道,允许 DataWriterDataReader 使用共享内存进行交流。因此,它不需要将样本数据复制到内存中以进行传输。

DataWriter 样本借用 是 Fast DDS 的一种扩展,允许应用程序借用一个用于发布的 DataWriter 中样本的缓冲区。样本可以直接构建在这个缓冲区上,从而消除了之后将其复制到 DataWriter 的需求。这防止了在发布应用程序和 DataWriter 之间的数据复制。如果使用了数据共享交付,则借用的数据缓冲区将位于共享内存中。

在订阅者端读取数据时,也可以通过从 DataReader 借用来完成。应用程序获取接收到的样本作为接收队列本身的引用。这防止了从 DataReader 到接收应用程序的数据复制。同样,如果使用数据共享交付,则借用的数据将在共享内存中,并且确实是用于 DataWriter 历史记录 的相同内存缓冲区。

结合这三种特性,我们可以实现发布应用程序和订阅应用程序之间的零拷贝通信。

15.8.2. Getting started

要启用零拷贝,请执行以下步骤:

  1. 在 IDL 文件中定义一个普通的有界类型,并生成相应的源代码,以便后续处理使用 Fast DDS-Gen 工具。
   struct LoanableHelloWorld
   {
       unsigned long index;
       char message[256];
   };
  1. DataWriter 端:

    • 为上述类型创建一个 DataWriter。确保该 DataWriter 未禁用数据共享。
    • 使用 loan_sample() 借用一个样本。
    • 使用 write() 写入该样本。
  2. DataReader 端:

    • 为上述类型创建一个 DataReader。确保该 DataReader 未禁用数据共享。
    • 使用 DataReader 中可用函数采取/读取样本。有关如何访问接收数据的贷款,请参考“贷款和返回数据”以及“SampleInfo 序列”部分以获取更多详细信息。
    • 使用 DataReader::return_loan() 返回借来的样本。

以上步骤概述了如何在 Fast DDS 中实现高效且无额外开销的数据传输方式,即零拷贝通信,显著提高系统性能并减少资源消耗。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?