1

接続ごとのスレッドモデルについて言えば、各接続には 1 つの単一のスレッドがあると想定されています。このスレッドは、ストリームからデータを読み取るために使用されます。ただし、ブロッキング I/Oを使用しているため、何かを読み取ろうとしている間は何も送信できません。

どうやら Minecraft は、接続ごとに 2 つのスレッド (読み取り用と書き込み用に 1 つずつ) を使用するようです。それは私もやるべきことですか、それともどのように実装すべきですか?

私の知る限り、データの送信もブロックするので、ティックスレッドから送信するだけではいけませんよね?

繰り返しになりますが、私が知りたいのは次のとおりです。

  • 接続ごとに読み取りスレッドと書き込みスレッドを用意する必要がありますか? そうでない場合、これをどのように実装すればよいですか?

前もって感謝します。

4

1 に答える 1

1

単純なピンポン スタイルのネットワーク ダイアログでは、ある種のステート マシンを操作する単一のスレッドで十分です。

ただし、データを非同期で送信または受信する必要があり、受信または送信された最後のデータに直接応答する必要がない場合は、方向ごとに 1 つのスレッドが賢明であり、決して悪い解決策ではありません。

Java の で提供されるノンブロッキング IO はNIO、高負荷の Web サーバーなどの高性能で高スループットのアプリケーションに有利です。接続ごとに 1 つまたは 2 つのスレッドを使用することは好ましくないため、合計で数千のスレッドが実行される可能性があります。サーバー上で同時に。クライアント側では、ノンブロッキング IO を使用してもそれほど多くは得られません。数百の接続を同時に維持する予定がない場合は、マルチスレッドが適しています。

于 2013-03-28T17:30:54.530 に答える