我需要从同一台机器上运行的另一个JVM调用一个方法。这些方法需要多次调用,才能获得类似Java/本机的性能。这是一种小输入、小输出的方法。另一个JVM在同一台机器上运行。
进行此调用并从“附近”运行的另一个JVM检索结果的最快方法是什么?
一些选项可能是RMI、管道、套接字、JMS、优化的同机间JVM通信支持,以及JVM中的一些低级黑客。任何想法都是受欢迎的,无论它有多专业。
发布于 2012-11-21 05:30:47
在同一台机器上的JVM之间进行通信的最快方式是使用共享内存,例如通过内存映射文件。这比通过环回使用套接字快100倍之多。例如,Sockets的往返时间为200 ns,而往返时间为10-20微秒。
一种实现是Java Chronicle BTW,100 ns延迟包括消息的持久性。
您是否需要这两种解决方案中的任何一种都不是理所当然的。通常,当人们说他们必须拥有“最快”时,他们真正的意思是他们不知道它需要多快,所以如果他们选择最快的,这应该是正确的解决方案。这通常是不正确的,因为采用最快的解决方案通常意味着在设计和实现上做出妥协,而如果你知道真正的需求是什么,那么它可能永远不需要。
简而言之,除非您有特定的、可测量的延迟和/或吞吐量需求,否则您应该假设最简单的解决方案才是您真正想要的。当您更好地理解所需的内容时,如果事实证明它并不适合,可以用更快的东西来代替它。
发布于 2012-11-21 05:41:55
另一种可能性是0MQ (ZeroMQ),尽管这取决于你所说的“最快”是什么意思-- zeromq对于吞吐量来说是非常好的,但如果你绝对需要尽可能低的延迟,它可能不是最优的。
对于只有两个ZeroMQ的JVM来说,ZeroMQ可能有些夸张,但是它的优点是,如果您以后想要将其中一个JVM移到另一台机器上,或者与非Java进程通信,那么JVM仍然可以很好地工作-而且它还可以扩展到更大规模、更复杂的通信。
https://stackoverflow.com/questions/13482130
复制相似问题