ハイパースレッディングを持たない単一の CPU を搭載したコンピューターで複数のスレッドを使用すると、パフォーマンス上の利点はありますか?
6 に答える
計算速度に関しては、いいえ。実際には、スレッドを管理するオーバーヘッドにより速度が低下します。
応答性に関しては、はい。たとえば、1 つのスレッドを IO 操作で待機させ、別のスレッドで同時に GUI を実行させることができます。
アプリケーションによって異なります。CPU の使用にすべての時間を費やしている場合、マルチスレッドは処理速度を低下させるだけです。ただし、マルチスレッドを使用してユーザーへの応答性を高め、パフォーマンスが向上した印象を与えることができる場合があります。
ただし、ファイル システム、ネットワーク、またはその他のリソースの使用など、コードが他のものによって制限されている場合は、アプリケーションが非同期で動作できるようになるため、マルチスレッドが役立ちます。したがって、1 つのスレッドがファイルがディスクからロードされるのを待っている間に、別のスレッドがリモート Web サーバーにクエリを実行し、別のスレッドが GUI を再描画している間に、別のスレッドがさまざまな計算を行っている可能性があります。
複数のスレッドを使用すると、さまざまな独立したタスクがどのようにインターリーブする必要があるかについてあまり注意を払う必要がないため、ビジネス ロジックを簡素化することもできます。オペレーティング システムのスケジューリング ロジックが自分のスケジューリング ロジックよりも優れている場合は、実際にパフォーマンスが向上する可能性があります。
単一の CPU でマルチスレッドを使用することを検討できます
- ネットワーク リソースを使用する場合
- 高負荷の IO 操作を行う場合
- データベースからデータをプルする場合
- 遅延の可能性がある他のものを悪用する場合
- 超高速反応でアプリを作りたいなら
単一の CPU でマルチスレッドを使用しない場合
- ほぼ 100% の CPU 使用率を行う高負荷の操作
- スレッドと同期の使用方法がわからない場合
- アプリケーションを複数の並列プロセスに分割できない場合
はい、単一の CPU で複数のスレッド (またはプロセス) を使用することには利点があります。1 つのスレッドが何かを待っている間ビジー状態になっても、他のスレッドは有用な作業を続けることができます。
ただし、これはタスク切り替えのオーバーヘッドによって相殺される可能性があります。確認するには、製品グレードのハードウェアでアプリケーションをベンチマークおよび/またはプロファイリングする必要があります。
絶対!何らかの種類の I/O を行う場合、マルチスレッド システムを使用することには大きな利点があります。1 つのスレッドが (比較的遅い) I/O 操作を待機している間、別のスレッドが有用な作業を行うことができます。
利用可能な CPU の数に関係なく、プリエンプティブなマルチタスクや非同期コンポーネントを含むアプリケーション (つまり、レスポンシブな GUI と大量の計算または継続的な I/O 処理を組み合わせたほとんどすべてのもの) が必要な場合は、マルチスレッドの方がはるかに優れたパフォーマンスを発揮します。アプリケーションごとに複数のプロセスを使用する代替手段よりも優れています。
これは、同じプロセス内のスレッドが同じメモリ コンテキストを共有するため、複数のプロセスよりもはるかに効率的にデータを交換できるためです。
これらの問題のかなり簡潔な説明については、コンピューターのマルチタスキングに関するこのウィキペディアの記事を参照してください。