首页 文章

具有共享内存的进程之间的通信结果是零拷贝?

提问于
浏览
9

我正在使用内核2.6在Linux上编写网络守护程序,该内核具有 one producer processconsumer processes 的N,它不会对数据进行任何更改,也不会向 生产环境 者创建任何响应 .

每当 生产环境 者进程生成一个数据对象,其长度从几个10字节变化到几十个K字节时,就必须将数据对象传递给一个可用的消费者进程 .

第一次,我考虑使用命名/未命名的PIPE . 但是,它们将是内存复制开销 .

  • producer的用户空间缓冲区--copy - >内核空间PIPE缓冲区

  • kernel-space PIPE buffer --copy - > consumer的用户空间缓冲区

由于该程序可能与大量具有低延迟的对等端一起工作,因此复制开销可能是有害的 . 因此,我决定使用POSIX共享内存和mmap() .

我只是想知道是否使用 POSIX shared-memory with mmap() does not result any memory-copy 在进程之间共享数据,这与PIPE不同 .

此外,还有其他方法可以在进程之间共享数据,但结果是零拷贝吗?该程序将在具有最新版本内核的Linux上运行,并且可能不具备跨平台能力 .

我决定不为每个消费者/产品生成/运行一个线程,而是由于设计问题而产生一个过程 .

谢谢你的答复 .

3 回答

相关问题