我们一直在对应用程序进行分析和性能优化,以尽可能减少延迟。我们的应用程序由3个独立的Java进程组成,所有进程都运行在同一台服务器上,并通过TCP/IP套接字互相传递消息。
我们已经将第一个组件的处理时间缩短到25微秒,但是我们发现写入下一个组件(位于本地主机)的TCP/IP套接字通信时间不变,大约为50微秒。我们还发现另一个异常行为,即接受连接的组件可以更快地写入数据(即<50微秒)。目前,除了套接字通信之外,所有组件的运行时间都小于100微秒。
我不是TCP/IP专家,不知道如何加速传输速度。Unix域套接字会更快吗?内存映射文件呢?还有哪些机制可能是将数据从一个Java进程传递到另一个进程的更快方法?
更新6/21/2011 我们创建了两个基准测试应用程序,一个使用Java,一个使用C++,以更紧密地测试TCP/IP并进行比较。Java应用程序使用NIO(阻塞模式),而C ++使用Boost ASIO tcp库。结果差不多,C ++应用程序比Java快约4微秒(但在其中一个测试中,Java击败了C++)。此外,两个版本都显示出消息时间的很大变异性。
我认为我们都同意基本结论,共享内存实现将是最快的。(尽管我们也想评估Informatica产品,前提是它符合预算。)