6

これまでは、同時に起動する 2 つのスレッドも並行して実行されている (両方ともコードを同時に実行している) という印象を受けていましたが、最近いくつかのドキュメントを読み、実際にはスレッドが交互に実行されることを理解しました。そのため、2 番目のスレッドからのコードの一部と同時に実行される最初のスレッドのコードはありません。 私の理解は正しいですか?

はいの場合、マルチスレッドは 1 つのスレッドの実行よりも高速ですか? 唯一の違いは、単一のスレッドがコードをシーケンシャルに実行するのに対し、マルチスレッドは実行を順番に実行できますが、並行して何も行われないため、同じ時間がかかるためです。

4

5 に答える 5

2

いいえ、Java スレッドは並行して実行されます (CPython などの他のプラットフォームとは異なります)。ただし、それによってパフォーマンスが向上するかどうかは、実行するコードによって異なります。

並列化可能なアルゴリズムを使用して PI を計算したり、大量の画像のサイズを変更したりするなど、簡単に並列化でき、CPU を集中的に使用するタスクでテストすると、パフォーマンスが基本的に直線的に向上することを簡単に実証できます (2 つの CPU = x2、4 つの CPU = x4 などがある場合)。 .)

編集
CPUが1つしかない場合でも、マルチスレッドは有益です。たとえば、1 つのスレッドがディスクから画像を読み取り、もう 1 つのスレッドが画像のサイズを変更することができます。これにより、CPUを無駄なく使用できるため、パフォーマンスも向上します。

EDIT2:単一のスレッドで画像を読み込んでサイズを変更すると(複数形に注意)、CPU使用率が常に100%にならないことがわかります。これは、スレッドがファイルから読み取っている間、サイズ変更を実行できないためです。複数のスレッドがある場合、サイズ変更が完了するまでに、別のファイルがメモリ内で準備されているはずです。大きな画像を扱う場合、この設計で CPU を 100% に固定するのは比較的簡単です。

于 2013-10-06T10:59:49.610 に答える
-1

うーん..スレッドは並列に実行されます...しかし、シングルコアの従来のPCではそうではありません..マルチコアチップまたは多くのCPUがある場合、それらは並列に実行できます..すべてのスレッドで実行される1つのスレッドを想像してくださいクアッドコア...

スレッドは、あなたがすでに知っているはずのように、他にも多くの利点をもたらします

于 2013-10-06T11:05:13.273 に答える