0

私はそれを理解するのを助けるために(Javaで)小さなマルチスレッドアプリケーションを開発しています。調べてみると、理想的なスレッド数は、プロセッサがサポートする数 (つまり、Intel i3 では 4、Intel i7 では 8 だと思います) であることがわかりました。しかし、swing だけでもすでに 3 つのスレッド + 1 つのスレッド (この場合はメイン) があります。これは、4 スレッドをサポートするプロセッサで大幅な改善が見られないということですか? スイング スレッドはすべてのプロセッサ スレッドを消費し、他のすべては同じプロセッサ上で実行されますか? それらのスイングスレッドを使用しても、(パフォーマンスに関して) マルチスレッド化する価値はありますか?

OBS: 私が JFrame を使用し、アクティブ レンダリングを行うということは、おそらく重要な観察事項です。それはおそらく私がスイングで行く限りです。

4

5 に答える 5

3

Swingのスレッドは、アイドル状態であることに多くの時間を費やします。理想的なスレッド数は、100%またはほぼ100%のプロセッサ時間で実行されるスレッドです。他の要因により、まだ大幅な改善が見られない場合がありますが、スイングに固有のスレッドは問題になりません。

于 2012-07-12T16:18:55.260 に答える
3

ほとんどのスレッドが行う一番のことは待機です。彼らはちょうどそこにいるので、システムがサービスを必要とする瞬間に準備ができています.

理想的なスレッド数についてのコメントは、100% のワークロードでのスレッド数です。

于 2012-07-12T16:15:00.173 に答える
3

プロセッサがサポートするスレッドの理想的な数が必要であることを学びました

Threadそのステートメントは、 が CPU 全体を占有している場合にのみ当てはまります。たとえば、Swing スレッド (イベント ディスパッチ スレッド) は、ほとんどの場合、ユーザーの入力を待っているだけです。

于 2012-07-12T16:15:54.203 に答える
2

はい、ありますが、最小限です。バックグラウンドで実行されている GC やファイナライザー スレッドなどの他のスレッドもあります。これらはすべて、Swing が動作するために Swing スレッドが必要であるのと同様に、JVM が動作するために必要です。

リソースや CPU 容量がほとんどない非常に小さなシステムを使用している場合を除き、それらについて心配する必要はありません。

最新のシステムでは、その多くが複数のプロセッサや複数のコアを備えており、JVM と OS はこれらの他のスレッドを他のプロセッサで実行し、必要なすべてのプロセッサ パワーをユーザー スレッドに提供します。

また、バックグラウンドの Swing スレッドのほとんどは、イベントの処理と表示の変更を待機している待機ループにあります。何か間違ったことをしない限り、それらはアプリケーション プロセッサの要件のごく一部を占めているはずです。

プロセッサがサポートするスレッドの理想的な数が必要であることを学びました

@Robin が述べたように、これは、多数の CPU バウンド操作を持つプログラムを最適化しようとしている場合にのみ必要です。たとえば、私たちのアプリケーションには通常、1000 のスレッドがありますが、8 つのプロセッサがあり、スレッドはすべて IO またはイベントを待っているため、非常に応答性が高くなります。CPU の数を気にする必要があるのは、プロセッサを集中的に使用する操作を行っていて、スループットを最大化しようとしている場合だけです。

于 2012-07-12T16:14:47.900 に答える
2

スレッドの理想的な数は、使用している CPU (コア) の数によって必ずしも左右されるわけではありません。実行している実際のコードに基づいて、多くの調整が必要です。

たとえば、いくつかのデータベース クエリを実行する Runnable を考えてみましょう (何でも構いません)。スレッド時間のほとんどは、データベースからの応答を待つブロックに費やされます。したがって、4 つのコアがあり、4 つのスレッドを実行する場合。いつでも、それらの多くが db 呼び出しでブロックされる可能性があります。CPU に悪影響を与えることなく、より多くのスレッドを簡単に生成できます。この場合、マシンの仕様によって制限されるのではなく、データベースが処理する並行性の程度によって制限されます。

もう 1 つの例はファイル I/O で、ほとんどの時間を I/O サブシステムがデータで応答するのを待つことに費やします。

唯一の現実的な方法は、特定の環境で試行錯誤しながら、マルチスレッド コードを評価することです。

于 2012-07-12T16:25:03.000 に答える