我正在使用内核 2.6 在 Linux 上编写一个网络守护程序,它有 一个生产者进程和 N 个消费者进程,它不会对数据进行任何更改,也不会对生产者产生任何响应。
每当生产者进程产生一个数据对象时,其长度从几个 10 字节到几个 10 K 字节不等,它必须将数据对象传递给一个可用的消费者进程。
第一次,我考虑使用命名/未命名的 PIPE。但是,它们将是内存复制开销。
- 生产者的用户空间缓冲区 --copy--> 内核空间 PIPE 缓冲区
- 内核空间 PIPE 缓冲区 --copy--> 消费者的用户空间缓冲区
由于该程序可能与大量具有低延迟的对等点一起工作,因此复制开销可能是有害的。因此,我决定将 POSIX 共享内存与 mmap() 一起使用。
我只是想知道在使用POSIX 共享内存和 mmap() 的进程之间共享数据是否不会导致任何 memory-copy,这与 PIPE 不同。
另外,有没有其他方法可以在进程之间共享数据,但结果是零拷贝?该程序将在具有最新版本内核的 Linux 上运行,并且可能不需要具有跨平台能力。
由于设计问题,我决定不为每个消费者/产品生成/运行一个线程,而是一个进程。
谢谢您的回复。