我已经看到了这样一个问题:两个独立的Java桌面应用程序之间的通信(答案:JGroups),我正在考虑用JavaGroups或直接RMI实现某些东西,但速度至关重要.我不会发送大量数据(MIDI消息的内容,每个3个字节,不过每三毫秒说两个消息),这将全部在同一台机器上.认为同一台物理机上的RMI/JGroups会慢吗?
(我的想法是我承受不起超过1毫秒的延迟,因为我已经有了一些,但我不确定如何在这种情况下最好地谈论速度.)
我想我真正的问题是:Java中的interspp通信是否有任何选项可以通过比TCP/IP更快的速度?我的意思是已经用Java实现的东西,而不是我需要实现的JNI可能性:)
我知道,不要尽早优化所有这些,但也比抱歉更安全.
Java中的interspp通信有没有比TCP/IP更快的选择?
没有显着... AFAIK.
但我认为你正在以错误的方式思考这个问题.假设您正在移动小消息,主要的性能杀手将是进行调用的开销,而不是移动字节的速度.这些开销包括进行系统调用所需的时间,在客户端和服务器端切换进程上下文,在内核中处理消息包头以及路由数据包等.任何类似RPC的同步交互都需要拨打电话等待回复; 即应用程序 - >服务器 - >往返时间.
获得更高吞吐量的方法是关注以下内容:
减少应用程序所需的RPC数量; 例如,将它们组合成更粗粒度的,和
研究将同步交互转变为异步交互的方法; 例如,使用基于消息而不是基于RPC的技术.