我写的网络守护进程,在Linux内核2.6,其中有 一个生产者进程和消费者氮处理,不使对数据进行任何改变,而不会产生任何响应回制片人。具有共享内存结果的进程之间进行通信零拷贝?
只要生产者进程生成一个数据对象,其长度从几个10字节到几十K字节不等,就必须将数据对象传递给一个可用的使用者进程。
第一次,我考虑使用一个命名/无名PIPE。但是,它们将成为内存复制开销。
- 生产者的用户空间缓冲--copy - >内核空间的管道缓冲区
- 内核空间的管道缓冲区--copy - >消费者的用户空间缓冲
由于程序可能与低延迟的大量同伴一起工作,复制开销可能是有害的。因此,我决定在mmap()中使用POSIX共享内存。
如果使用过程之间共享数据POSIX共享内存使用mmap()不会导致任何存储器复制,不像PIPE我只是想知道。
另外,是否有任何其他方式来共享进程之间的数据,但结果零拷贝? 该程序将在Linux上运行,最近版本的内核为 ,可能不需要具有跨平台功能。
我决定不为每个消费者/产品产卵/运行一个线程,而是由于设计问题导致进程 。
感谢您的回复。
确定进程之间移动大量数据不是“过早优化”,而是“必要的体系结构”。并不是所有的优化(或设计或架构)都“不成熟”。 – 2013-12-10 01:04:34