0

入力ストリームからファイルチャネルにバイトを転送しています。プロセッサとファイル io はネットワークよりも何倍も高速であるため、データの転送中にスレッドが何度も一時停止することは明らかです。ファイルをダウンロードするためのパイプラインの概念を実装して、一時停止するたびにスレッドが次の取得要求を処理するようにすることは可能ですか?単一のスレッドが複数の取得要求を処理していますか? ここに私の簡単な実装があります:

while (start < end && currentState.get() == 1) {
      delta = fileChannel.transferFrom(inputChannel, start, 8192);
      start += delta;
      }

速度を改善するための他のアイデアは大歓迎です。

4

1 に答える 1

2

次の 2 つの方法があります。

  1. コードをイベント指向のパラダイムに完全に書き直します (最善の方法は、Netty を使用することです)。

  2. Java の優れたマルチスレッド サポートを採用しています。この場合、ブロッキング I/O コードのほとんどを保持できます。

于 2014-08-24T11:59:33.997 に答える