Linux上用于Java / C ++应用程序的共享内存IPC的很好替代scheme

我目前使用Java和C ++应用程序之间的IPC共享内存,但寻找一个更方便的select。

有人可以build议一个更好的方法相同的性能和速度?

谢谢!

Solutions Collecting From Web of "Linux上用于Java / C ++应用程序的共享内存IPC的很好替代scheme"

这取决于您计划如何交互应用程序。 在POSIX环境中,您有管道,共享内存,套接字,信号量和消息队列。 看到这个问题: 比较unix linux IPC获取更多信息。

什么是您的流程(即客户/服务器,生产者,消费者等)的交互模式?

从个人经验来看,我会建议你最好的选择是管道(因为它们只是读取和写入字节的文件)或套接字(因为这两种语言都支持它们)。

正如米克隆所说,这很大程度上取决于你在做什么。 AFAIK,没有任何IPC方法有原生的Java绑定,所以你可能将不得不使用JNI并自己绑定,所以所有不同的方法大致同样困难。 如果你正在做消息传递,我强烈建议使用消息队列。 它们很容易使用(一旦你有绑定),并有良好的性能。 如果你需要“共享”一些资源,那么你可能要坚持共享内存。

因为听起来你有一些客户端/服务器的东西,我会说使用消息队列,UNIX域套接字或命名管道。 它们都涉及拷贝内核中的数据,所以它们不如共享内存那么快,但是它们仍然非常快。 如果你有类似消息的数据(个别的小包),去消息队列。 这可能是最干净的解决方案。 如果您有更多的数据流,请使用管道或套接字。 套接字的优点是,如果你愿意的话,你可以很容易地使它像网络一样透明(比如X11),但是比管道稍微难一些。 性能可能非常相似。

Java虽然可能不是最高效的,但它只支持开箱即用的插件(我记得最好的)。 他们非常灵活,也许没有其他选择那么快。 正如Zifre所说,它为您提供了网络透明度以及语言/绑定透明度的机会。 因为几乎所有的语言都支持现成的套接字库。

当我把效率从窗口扔出去的时候,如果你想把它提高到一个新的水平,你可以把它包装在某种Web服务中。 在消费者上使用嵌入式Web服务器,以便生产者提交他们的数据。

用不同语言编写的应用程序之间进行通信的最简单的方法是IMHO CORBA 。 那里有非常好的开源CORBA ORB 。 我们使用TAO的C + +和JacORB的Java。 还有像OCI和Remedy这样的公司提供技术支持。

我目前使用Java和C ++应用程序之间的IPC共享内存,但寻找一个更方便的选择。

有人可以建议更好的方法,但具有相同的性能速度?

对于简单的共享内存,你甚至不需要特殊的库:

class Main { private static class CustomThread extends Thread { public int x = 0; public void run() { x = 5; } } public static void main(String[] args) { CustomThread t = new CustomThread(); t.start(); System.out.println(tx); System.out.println(tx); } } 

局部变量x可以在线程之外访问,允许您使用它来传递信息进出线程。