アプリケーションのプロファイリングとプロファイリングを行って、レイテンシーを可能な限り削減しました。私たちのアプリケーションは 3 つの個別の Java プロセスで構成され、すべてが同じサーバー上で実行され、TCP/IP ソケットを介して互いにメッセージを渡しています。
最初のコンポーネントの処理時間を 25 μs に短縮しましたが、次のコンポーネントへの TCP/IP ソケットの書き込み (localhost 上) には常に約 50 μs かかることがわかります。もう 1 つの異常な動作が見られます。接続を受け入れているコンポーネントは、より高速に書き込むことができます (つまり、50 μs 未満)。現在、ソケット通信を除いて、すべてのコンポーネントが 100 μs 未満で動作しています。
TCP/IP の専門家ではないので、これを高速化するために何ができるかわかりません。Unix ドメイン ソケットの方が高速ですか? MemoryMappedFiles? ある Java プロセスから別の Java プロセスにデータを渡すためのより高速な方法として、他にどのようなメカニズムがあるでしょうか?
更新 2011 年 6 月 21 日 2 つのベンチマーク アプリケーションを作成しました。1 つは Java で、もう 1 つは C++ で、TCP/IP をより厳密にベンチマークし、比較します。Java アプリは NIO (ブロッキング モード) を使用し、C++ は Boost ASIO tcp ライブラリを使用しました。結果はほぼ同等で、C++ アプリは Java よりも約 4 マイクロ秒高速でした (ただし、テストの 1 つで Java は C++ を上回りました)。また、どちらのバージョンもメッセージあたりの時間に大きなばらつきがありました。
共有メモリの実装が最も高速になるという基本的な結論に同意していると思います。(ただし、予算に適合する場合は、インフォマティカ製品も評価したいと考えています。)