0

出力ストリーム (私の場合は tcp/ip を使用しています) 経由で送信されるデータはブロックされる可能性があると言われました。その場合、データが送信されるのを待たなければならないことでアプリケーションを停止したくありません。

これを行う方法のモデルが必要です。

このストリームを介してメッセージ オブジェクトを送信する必要があります。

これらのメッセージ オブジェクトを含むブロッキング キューが必要だと考えています。スレッドの run() メソッドは、利用可能なすべてのメッセージ オブジェクトを取得して送信します (true の場合)。

私の質問は

  1. while true ループよりも良い方法はありますか? おそらく while true ループで、送信するメッセージがない場合、スレッドに譲歩/スリープを指示できます。

  2. 使用するより良いモデルはありますか?私のコードに while(true) があると、メッセージを待っているプロセッササイクルを消費するのではないかと心配しています。

どなたか経験のある方、良い方法があれば教えてください。

ありがとう、ジブ

4

2 に答える 2

0

Java では、これを行う 2 つの方法が実装されています。ブロッキング メソッド (既に説明済み) による方法と、非ブロッキング メソッドによる方法です。

メソッドをブロックして非同期通信に到達する最も簡単な方法については、この回答をご覧ください: 質問 1041014

非ブロッキング メソッドを使用する場合は、NIO フレームワークを確認する必要があります。いくつかの複雑な概念を使用するため、最初に実装するのは特に簡単ではありませんが、通信イベントの処理方法を理解すれば、強力な実装を作成するのは非常に簡単です。最後に、CPU 時間を無駄にする必要がないため、ブロッキング メソッドを使用することになりますが、NIO フレームワークを使用すると、CPU とメモリの使用に最適なシングル スレッド通信の実装を作成できます。

O'reilly NIO book を見てください。

于 2009-07-07T01:39:59.820 に答える
0

キューがブロックしている限り、これは優れたメカニズムです。別のメッセージがキューに到着するのを待っている間、プロセッサを自動的に譲ります。

ノンブロッキング方式でキューを読み取ると、多くの CPU 時間が浪費されます。通常、それを行うにはもっと努力する必要がありますが、それはすべて、使用する Queue のタイプによって異なります。

于 2009-07-06T23:44:09.163 に答える