我需要从运行在同一台机器上的另一个JVM调用一个方法。这种方法需要用Java/native-like的性能进行非常多的调用。这是一个小输入小输出方法。另一个JVM在同一台机器上运行。同机JVM之间的最快通信
调用这个调用并从其他运行“附近”的JVM检索结果的最快方法是什么?
某些选项可能是RMI,管道,套接字,JMS,一种优化的同机JVM间通信支持,以及JVM中的一些低级别攻击。任何想法都是受欢迎的,不管它有多专业。
我需要从运行在同一台机器上的另一个JVM调用一个方法。这种方法需要用Java/native-like的性能进行非常多的调用。这是一个小输入小输出方法。另一个JVM在同一台机器上运行。同机JVM之间的最快通信
调用这个调用并从其他运行“附近”的JVM检索结果的最快方法是什么?
某些选项可能是RMI,管道,套接字,JMS,一种优化的同机JVM间通信支持,以及JVM中的一些低级别攻击。任何想法都是受欢迎的,不管它有多专业。
在同一台机器上的JVM之间进行通信的最快方式是使用共享内存,例如通过内存映射文件。这比使用Socket over环回的速度快100倍。例如往返时间200 ns,套接字的往返时间为10-20微秒。
一个实现是Java Chronicle顺便说一句100ns的延迟包括消息的持久性。
您是否需要这些解决方案中的任何一种都不应视为理所当然。通常当人们说他们必须拥有“最快”的时候,他们真的意味着他们不知道需要多快,所以如果他们选择最快的话,那应该是正确的解决方案。这通常是不正确的,因为采用最快的解决方案通常意味着在设计和实施中做出妥协,如果只知道需求真的是什么,它可能会变成不需要的。总之,除非您有特定的,可测量的延迟和/或吞吐量要求,否则您应该假设最简单的解决方案就是您真正想要的。这可以用更快的东西代替,如果你对所需要的东西有更好的理解,它就不适用了。
另一种可能性是0MQ (ZeroMQ),虽然这取决于你所说的“最快”的意思 - zeromq为吞吐量是优秀的,但如果你绝对必须有尽可能低的延迟它可能不是最优的。
ZeroMQ对于只有两个JVM而言可能会过量,但具有如果您稍后想要将其中一个JVM移动到另一台机器或与非Java进程通信的优势,ZeroMQ仍然可以正常工作 - 更大规模,更复杂的通信。
所以我们在谈论巨大的输入/输出?这也可能有用。谢谢! – Nick
ZeroMQ的往返行程约为30微秒。如果这个延迟是好的,它可能比替代品更好。 –
JMX高效且易于实现 –
可能的重复[在同一台机器上两个JVM进行通信的最快方式是什么?](http://stackoverflow.com/questions/13425485/what-is-the-最快的方式为两个jvms在同一机器沟通) – kosa
@Nambari一个重复的问题,但我不同意答案。 ;) –