相同机器JVM之间最快的通信

时间:2012-11-20 21:05:43

标签: java jvm rmi pipe

我需要从同一台机器上运行的另一个JVM调用一个方法。需要使用Java /类似本机的性能来调用此方法很多次。它是一种小输入小输出方法。另一个JVM在同一台机器上运行。

进行此调用并从另一个运行“附近”的JVM检索结果的最快方法是什么?

一些选项可能是RMI,管道,套接字,JMS,优化的同一机器JVM间通信支持,以及JVM中的一些低级别攻击。任何想法都是受欢迎的,无论它是多么专业。

2 个答案:

答案 0 :(得分:5)

在同一台计算机上的JVM之间进行通信的最快方法是使用共享内存,例如通过内存映射文件。这比使用Socket over loopback快100倍。例如往返时间为200 ns,而套接字则为10-20微秒往返时间。

一种实现是Java Chronicle BTW 100 ns延迟包括消息的持久性。

您是否需要这些解决方案并不是您应该理所当然的事情。通常,当人们说他们必须拥有“最快”时,他们真的意味着他们不知道需要多快,所以如果他们选择最快,它应该是正确的解决方案。这通常是不正确的,因为采用最快的解决方案通常意味着在设计和实施方面做出妥协,如果只知道要求是什么,它可能永远不会需要。

简而言之,除非您有特定的,可衡量的延迟和/或吞吐量要求,否则您应该假设最简单的解决方案是您真正想要的。如果事情发生的话,可以用更快的东西代替它,当你更好地了解所需要的东西时它就不适合。

答案 1 :(得分:1)

另一种可能性是0MQ (ZeroMQ),虽然它取决于你所说的“最快” - zeromq非常适合吞吐量但是如果你绝对必须具有最低的延迟

ZeroMQ对于两个JVM可能过度,但是如果您以后想要将其中一个JVM移动到另一台机器或与非Java进程通信,ZeroMQ仍然可以正常工作 - 并且它可以扩展到更大规模,更复杂的通信。