RMI はパフォーマンスの点で効率的かどうか、オーバーヘッドが必要だと思います。
RMI は、その機能に対して効率的です。ほとんどの人が必要とするよりもはるかに多くのことを行いますが、通常は十分に高速です。約 1 ミリ秒の待機時間で、1 秒あたり 1 ~ 3 K のオーダーのメッセージを取得できるはずです。
ローカル ホストを使用する TCP/IP ソケットはどうですか?
これは常にオプションですが、単純な Java シリアライゼーションでは、RMI を使用するよりもはるかに高速ではありません。シリアライゼーションとデシリアライゼーションをどのように行うかは、高性能にとって重要です。
重要な注意点として、メッセージのシリアライズとデシリアライズに多くの時間が費やされますが、これはほとんどのトランスポートでは役に立ちません。そのため、最大のパフォーマンスが必要な場合は、効率的なマーシャリング戦略を検討する必要があります。ほとんどのトランスポート プロトコルは生バイトのみをベンチマークします。
皮肉なことに、ディスクを使用する場合は、TCP や UDP (ZeroMQ など) よりも高速になる可能性があり、さらに「無料」で永続性を得ることができます。
このライブラリ (私は作成者です) は、100 ナノ秒 (ZeroMQ の 350 分の 1) という低レイテンシでプロセス間で毎秒数百万のメッセージを実行できますhttps://github.com/peter-lawrey/Java-Chronicle 利点は次のとおりです。
- 超高速のシリアライゼーションとデシリアライゼーション。多くの場合、トランスポート コストよりもはるかに長い時間がかかるため、ほとんどのトランスポート ベンチマークではこれを含めません。
- メッセージが送信された後、いつでもキュー間で何が起こっているかを監視できるということです。
- すべてのメッセージを再生します。
- プロデューサーは、ディスク容量のサイズまでマイクロバーストを適切に処理するために、コンシューマーよりも前の任意の量のデータにすることができます。たとえば、消費者は TB 遅れる可能性があります。
- TCP 経由のレプリケーションをサポートします。
- コンシューマまたはプロデューサのいずれかの再起動は、ほとんど透過的です。