我们一直在分析和剖析我们的应用程序,以尽可能减少延迟。我们的应用程序由3个独立的Java进程组成,它们都运行在同一台服务器上,它们通过TCP/IP套接字将消息传递给对方。Java TCP/IP套接字延迟 - 卡在50微秒(微秒)? (用于Java IPC)
我们将第一个组件的处理时间缩短到25μs,但我们看到TCP/IP套接字写入(在本地主机上)到下一个组件总是需要大约50μs。我们看到另一个异常行为,其中接受连接的组件可以写得更快(即<50μs)。目前,除套接字通信外,所有组件都运行< 100μs。
不是TCP/IP专家,我不知道如何才能加快速度。 Unix域套接字会更快吗? MemoryMappedFiles?还有哪些其他机制可能是将数据从一个Java过程传递到另一个更快的方法?
UPDATE 2011/6/21 我们创建了2个基准测试应用程序,一个使用Java,一个使用C++来更严格地对TCP/IP进行基准测试并进行比较。 Java应用程序使用NIO(阻塞模式)和C++使用的tcp库Boost ASIO。结果大致相当,C++应用程序比Java快大约4μs(但在其中一项Java打败C++的测试中)。而且,两个版本在每条消息的时间上都表现出很大的变化。
我想我们同意共享内存实现将会是最快的基本结论。 (虽然我们也想评估Informatica产品,只要它符合预算。)
微秒的SI简写为μs,而不是μ(并且您应该在数量和单位之间有一个空格)。我为你修好了。 – 2011-05-09 22:52:38
不是一个专家,我会冒险猜测UDP可能会让你的延迟下降,因为它是一个更轻量级的协议。当然,编程时会更加痛苦,如果您的应用程序必须手动实现TCP提供的开箱即用的可靠性保证,则可能不会带来任何好处。 – 2011-05-09 23:02:10
stdin/stdout/stderr怎么样(例如第一个进程启动另一个进程2,comms只发生在这个'master'和2个slave之间)?这是一个选项吗? – laher 2011-05-09 23:08:07