<分区>
我需要从运行在同一台机器上的另一个 JVM 调用一个方法。此方法需要以类似 Java/ native 的性能调用很多次。是一种小投入小产出的方法。另一个 JVM 在同一台机器上运行。
进行此调用并从“附近”运行的其他 JVM 检索结果的最快方法是什么?
一些选项可能是 RMI、管道、套接字、JMS、优化的同机 JVM 间通信支持、JVM 中的一些低级 hack。欢迎任何想法,无论它有多专业。
<分区>
我需要从运行在同一台机器上的另一个 JVM 调用一个方法。此方法需要以类似 Java/ native 的性能调用很多次。是一种小投入小产出的方法。另一个 JVM 在同一台机器上运行。
进行此调用并从“附近”运行的其他 JVM 检索结果的最快方法是什么?
一些选项可能是 RMI、管道、套接字、JMS、优化的同机 JVM 间通信支持、JVM 中的一些低级 hack。欢迎任何想法,无论它有多专业。
最佳答案
在同一台机器上的 JVM 之间进行通信的最快方式是使用共享内存,例如通过内存映射文件。这比使用 Socket over loopback 快 100 倍。例如200 纳秒的往返时间与 10-20 微秒的套接字往返时间。
一个实现是Java Chronicle顺便说一句,100 纳秒的延迟包括消息的持久性。
您不应该想当然地认为您是否需要这些解决方案中的任何一个。通常当人们说他们必须拥有“最快的”时,他们的意思是他们不知道需要多快,所以如果他们选择最快的,那应该是正确的解决方案。这通常是不正确的,因为采用最快的解决方案通常意味着在设计和实现中做出妥协,如果您知道真正的需求是什么,那么这些妥协可能永远不需要。
简而言之,除非您有特定的、可测量的延迟和/或吞吐量要求,否则您应该假设最简单的解决方案是您真正想要的。如果您对所需内容有了更好的了解,但发现它不合适,可以用更快的东西替换它。
关于java - 同机 JVM 之间最快的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482130/