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數據。