4

同じマシンで実行されている別の JVM からメソッドを呼び出す必要があります。このメソッドは、Java/ネイティブのようなパフォーマンスで何度も呼び出す必要があります。小入力小出力方式です。他の JVM は同じマシンで実行されます。

この呼び出しを行い、「近く」で実行されているこの他の JVM から結果を取得する最速の方法は何ですか?

いくつかのオプションは、おそらく RMI、パイプ、ソケット、JMS、最適化された同一マシンの JVM 間通信サポート、JVM の低レベル ハックです。専門性に関係なく、どんなアイデアでも大歓迎です。

4

2 に答える 2

5

同じマシン上の JVM 間で通信する最速の方法は、メモリ マップ ファイルなどを介して共有メモリを使用することです。これは、Socket over loopback を使用するよりも 100 倍高速です。たとえば、ソケットの往復時間は 10 ~ 20 マイクロ秒ですが、往復時間は 200 ns です。

1 つの実装はJava Chronicle BTW です。100 ns のレイテンシには、メッセージの永続性が含まれます。

これらのソリューションのいずれかが必要かどうかは、当然のことと考えるべきではありません。多くの場合、人々が「最速」を持たなければならないと言うとき、それは本当に必要な速度がわかっていないことを意味します。通常、これは正しくありません。なぜなら、最速のソリューションを採用することは、実際の要件が何であるかを知っていれば、設計と実装で妥協する必要がなくなる可能性があるためです。

要するに、特定の測定可能な遅延やスループットの要件がない限り、最も単純なソリューションが本当に必要なものであると想定する必要があります。これは、必要なものをよりよく理解している場合に適切でないことが判明した場合は、より高速なものに置き換えることができます。

于 2012-11-20T21:30:46.877 に答える
1

もう1つの可能性は0MQ (ZeroMQ)ですが、「最速」の意味によって異なります. zeromq はスループットに優れていますが、レイテンシを可能な限り低くする必要がある場合は、最適ではない可能性があります.

ZeroMQ は 2 つの JVM だけでは過剰かもしれませんが、後で JVM の 1 つを別のマシンに移動したり、Java 以外のプロセスと通信したりする場合でも、ZeroMQ は問題なく機能し、より大規模に拡張できるという利点があります。 、より複雑な通信も。

于 2012-11-20T21:41:54.820 に答える