我有2个进程,我希望其中一个进程与另一个具有高数据吞吐量的进程通信。我已经尝试过IPC(特别是boost :: iterprocess)和套接字,但它们的性能/吞吐量太慢而无法使用。
我的后备选项是将第二个进程作为第一个进程的附加子进程启动(加载其dll,创建“工具”等),这具有最佳性能,因为它们在技术上是相同的进程,并且传递数据只是用DLL调用接口函数。
我正在寻找避免这样做的方法,但仍然具有那种程度的表现。是否可以设置一个2个进程可以加载的DLL,并以某种方式共享内存空间? IPC和套接字是唯一的选择吗?
答案 0 :(得分:1)
在Windows上,您可以使用命名管道。在本地使用时,它们曾被认为比插座更有效。然而,他们已经不再流行了。您可以在microsoft docs on named pipes
了解更多信息答案 1 :(得分:0)
对于本地进程,您可以使用共享文件。如果你的内存映射文件会更快。
答案 2 :(得分:0)
您问题中的“IPC”是什么?套接字,管道,共享内存都是做IPC的方法。是的,您可以在Windows,Linux和其他通用系统上使用共享内存。在C ++中,您可以将内存块声明为共享(至少在Windows上),或者您可以调用内存映射文件(MMF)函数。在Linux和BSD上,您也使用Memory Mapped File功能。 除了将第二个进程转换为DLL之外,MMF是最快的方式。命名管道和其他任何东西都比较慢。