首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同一台机器上的JVM之间最快的通信

同一台机器上的JVM之间最快的通信
EN

Stack Overflow用户
提问于 2012-11-21 05:05:43
回答 2查看 3.6K关注 0票数 4

我需要从同一台机器上运行的另一个JVM调用一个方法。这些方法需要多次调用,才能获得类似Java/本机的性能。这是一种小输入、小输出的方法。另一个JVM在同一台机器上运行。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-21 05:30:47

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

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

您是否需要这两种解决方案中的任何一种都不是理所当然的。通常,当人们说他们必须拥有“最快”时,他们真正的意思是他们不知道它需要多快,所以如果他们选择最快的,这应该是正确的解决方案。这通常是不正确的,因为采用最快的解决方案通常意味着在设计和实现上做出妥协,而如果你知道真正的需求是什么,那么它可能永远不需要。

简而言之,除非您有特定的、可测量的延迟和/或吞吐量需求,否则您应该假设最简单的解决方案才是您真正想要的。当您更好地理解所需的内容时,如果事实证明它并不适合,可以用更快的东西来代替它。

票数 5
EN

Stack Overflow用户

发布于 2012-11-21 05:41:55

另一种可能性是0MQ (ZeroMQ),尽管这取决于你所说的“最快”是什么意思-- zeromq对于吞吐量来说是非常好的,但如果你绝对需要尽可能低的延迟,它可能不是最优的。

对于只有两个ZeroMQ的JVM来说,ZeroMQ可能有些夸张,但是它的优点是,如果您以后想要将其中一个JVM移到另一台机器上,或者与非Java进程通信,那么JVM仍然可以很好地工作-而且它还可以扩展到更大规模、更复杂的通信。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13482130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档