13

マルチスレッド Java アプリでのプロセス間通信に最適な方法は何ですか。

オブジェクトとデータを1つのスレッドにのみバインドできるように、実装が簡単で信頼できるパフォーマンスが必要です(JMSは使用しないでください)。

どんなアイデアでも大歓迎です!

4

5 に答える 5

14

少し明確にしていただけますか?単一の JVM での IPC のことですか? (複数のスレッドはありますが、OS レベルでは 1 つのプロセスのみです。) それとも、複数の JVM のことですか? (そして真に OS レベルのプロセス間通信。)

それが最初の場合は、ConcurrentLinkedQueueのようなjava.util.concurrentの何かがうまくいくでしょう。(java.util.concurrent のクラスを使用して、スレッド間でメッセージを渡します。)

後者の場合は、推測してRMIを検討することをお勧めしますが、完全に信頼できるとは言えません。もう少し「実践的」に管理する必要があります。

于 2008-09-09T09:43:22.173 に答える
9

シナリオ 1 の JVM、複数のスレッドを想定すると、実際には java.util.concurrent が注目すべき場所であり、具体的にはさまざまな Queue 実装です。しかし、その上にある抽象化は素晴らしいかもしれません。Jetlangは非常に興味深い、軽量の Java メッセージ パッシングに見えます。

于 2008-09-09T10:29:51.393 に答える
3

プロデューサー/コンシューマー キューを使用する必要があります。そうすることで、マルチスレッド プログラミングの落とし穴 (競合状態やデッドロック) を回避できます。さらに、Disruptor や MentaQueue などのロックフリー キューを使用すると、簡単でクリーンなだけでなく、はるかに高速になります。これについて詳しく説明し、100 ナノ秒未満のレイテンシを実現する方法を示すブログ記事を書きました: Inter-thread communication with 2-digit nanosecond latency .

于 2012-11-27T02:16:37.717 に答える
3

java.util.concurrentパッケージ全体を調べることをお勧めします。このパッケージには、同時実行性とスレッド間のさまざまな通信手段を処理するための複数のクラスがあります。あなたの質問はかなり一般的であるため、すべては達成したいものに依存します。

于 2008-09-09T09:54:56.623 に答える
3

github ( http://github.com/caplogic/mappedbus ) にMappedBus を追加しました。これは、複数の Java プロセス/JVM がメッセージを交換して通信できるようにする効率的な IPC ライブラリであり、トランスポートにメモリ マップ ファイルを使用します。スループットは、4,000 万メッセージ/秒と測定されています。

于 2015-05-15T08:42:41.500 に答える