只讲windows上的经验,配置是i5 1035g4
windows上的pipe是基于共享内存的,pipe的带宽大约是1GB/s,延迟微秒级。pipe的带宽与zeromq下的IPC socket差不多。
zmq的TCP模式下带宽大约是500MB/s,延迟也是微秒级别,比pipe略高,
共享内存通信一般是进程A将数据拷贝到共享内存中,再将数据从共享内存拷贝到B进程中,首次数据拷贝带宽大约1GB/s(平均带宽只有500MB/s,比管道慢),之后是10GB/s,对于大量数据还可使用多线程,这时候带宽可以到50GB/s。共享内存的延迟主要取决于L3的延迟和内存的延迟,前者大约15ns,后者大约100ns。不过,我们一般会用别的通信方式控制内存共享,此时延迟取决于所使用的通信方式。这意味着在小包模式下,共享内存的吞吐量可以超过1e7tps,如果全部命中L3,则吞吐量可以达到1e8tps级别,而TCP大约是1e5tps。
除了共享内存外,我还试过一种小众的IPC方式,叫WriteProcessMemory,用它可以直接将内存复制到另外一个进程空间,而不用共享内存做周转,不过这个函数好像极慢无比,测下来带宽只有200MB/s。
补充:大佬在linux下对pipe做了针对性优化后带宽可以到35GB/s,有兴趣的可以参考 Linux 管道到底能有多快? - 知乎 (zhihu.com)