c++共享内存通信如何实现
c++共享内存通信如何实现 前言 mmap机制-对应cyber中共享内存通信模式中的PosixSegment 小结 System V共享内存-对应cyber中XsiSegment 小结 参考链接 前言 现在很多对性能要求高的项目都会支持共享内存的进程间通信(IPC)方式,本文会以百度Apollo自动驾驶项目为例,展示两种c++中实现共享内存通信的方式(对应linux中两种不同的机制)。 共享内存实际上就是两个不相关的进程访问同一块逻辑内存,相应的肯定需要额外的同步机制来保证读写正确。采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的。 mmap机制-对应cyber中共享内存通信模式中的PosixSegment 内存映射机制mmap是POSIX标准的系统调用,mmap(