命名管道?XML-RPC?标准输入输出?网页服务 ?
我不会使用像共享内存等类似的不安全的东西
命名管道是最快的方法,但它只适用于同一台计算机上的进程之间的通信.命名管道通信不会一直沿着网络堆栈(因为它只适用于同一台计算机上的通信)所以它总是会更快.
我遗漏了共享内存,因为你特别提到你不想走那条路.共享内存甚至比命名管道更快.
因此,这取决于您是否只需要在同一台计算机或不同计算机上的进程之间进行通信.由于XML中的大量开销,任何基于XML的通信协议(例如,Web服务)通常都会变慢.
我不认为这是一个快速的答案.如果我是你,我会在 Stevens和Rago 的Unix环境(APUE)中购买/借用高级编程的副本,并阅读关于IPC的第15章和第16章.如果您真的想了解*nix(其中很多适用于任何POSIX系统)是如何工作到内核级别的,那么这本书是一本精彩的书.
如果你必须有一个快速的答案,我会说以下(没有大量的思考),按效率的降序排列:
本地机器IPC
共享内存/内存映射文件
命名管道/ FIFO(仅在相关处理之间 - 即fork)
Unix域套接字
网络IPC/Internet套接字
数据报套接字
流套接字
原始套接字
在这两个级别,您将不得不考虑如何对传输的数据进行编码/解码,并在内存使用和CPU利用率之间进行权衡.
在网络级别,您将不得不考虑将要运行的protcols层.最常见的是,在应用程序层的底部,您将选择TCP/IP或UDP.TCP有更多的开销,因为它有纠错,校验和和许多其他东西.如果您需要按顺序传递消息,则需要使用TCP而不是UDP.
除此之外还有其他协议,如HTTP,SOAP(在HTTP之上或其他协议,如FTP/SMTP等).只要您是网络绑定而不是CPU绑定,二进制协议将更有效.如果在MS.Net平台上使用SOAP,那么消息的二进制编码将在网络上更快,但可能会占用更多CPU.
我可以继续 这不是一个简单的问题.学习延迟是什么以及如何处理缓冲是能够决定你总是被迫使用IPC的权衡的关键.如果你真的想知道引擎盖下发生了什么,我会推荐上面的APUE书......