fastdds 共享内存分两个部分,一部分用于保存数据,一部分用于通信。
fastrtps_+“UUID”:共享内存包括又两部分数据,BufferNode和segment_size,
用配置文件port_queue_capacity_指定BufferNode的数量,segment_size用于保存实际传输的数据。
fastrtps_port+“port_id”:用于控制发送的数据,包含循环队列MultiProducerConsumerRingBuffer,队列中包含共享内存Node成员,共享内存Cell[port_queue_capacity_]数组。
当发送数据时,首先在segment_size中申请内存(申请BufferNode用于保存申请offset、size、引用计数),拷贝到segment里,生成SharedMemManager::Buffer &buffer对象。
然后找到对应port,调用try_push函数,并转换成BufferDescriptor,push到RingBuffer中。
数据接收,会打开OpenInputChanenl,打开多个port接收数据。并保存到input_channels_的vector中,每个port启动单独线程等待从MultiProducerConsumerRingBuffer队列中pop数据。
fastdds共享内存
缺点
1、共享内存中发送大量服务发现消息
2、消息都是经过序列化后的消息。
优点
共用传输层