0

Javaでは、Javaで1つのタスクを実行するために複数のスレッドを追加すると、そのタスクをより高速に実行できますか?

現在、私のプログラムではメインスレッドが使用されていましたが、遅かったです。私の現在の測定値は毎秒 500 プロセスでしたが、プロセスの総数は 10 億を超えていました。プログラムをより速く実行するにはどうすればよいですか?

4

1 に答える 1

3

Javaでは、Javaで1つのタスクを実行するために複数のスレッドを追加すると、そのタスクをより高速に実行できますか?

それはあなたが何をしているかに完全に依存します。独立したデータに対してタスクを実行し、結果の取得または保存にボトルネックがなく、複数のプロセッサを搭載したマシンを使用している場合は、より多くのスレッドを使用すると役立つ可能性があります。

ただし、それが役に立たないさまざまな方法があります。

  • 遅いリソースから入力データを読み取っている場合は、とにかく読み取ることができるのと同じくらい速く処理している可能性があります
  • 遅いリソースに結果を書き込んでいる場合は、とにかく結果を書き込める限り速く処理している可能性があります
  • あるタスクが別のタスクの結果に依存している場合、並列化できない可能性があります
  • CPU コアが 1 つしかなく、タスクが既に CPU バウンドになっている場合は、スレッドを追加しても役に立ちません。

これらのケースのいくつかでは、スレッド化が役立つことがありますが、CPU バウンドで予備のコアがたくさんある場合ほど重要ではありません。現在のボトルネックがどこにあるかを突き止める必要があります。

最良の場合でも、所有しているコアの数に比例したスピードアップのみが得られることに注意してください。したがって、16 個のコア (可能性は低いですが実現可能) と完全な並列化があり、1 つのコアが 1 秒あたり 500 アイテムを処理でき、10 億個のアイテムがある場合、すべてを処理するのに 35 時間近くかかることになります。

ほぼ確実なことの 1 つは、マルチスレッド コードはシングルスレッド コードよりも複雑になるということです。物事を単純にするために、高レベルの抽象化 (たとえば、java.util.concurrent低レベルのもの ( など) の代わりに にあるもの) を使用するようにしてください。java.lang.Thread

于 2012-11-16T07:06:26.180 に答える