Joe Duffy は、MSDN の記事 " Using concurrency for scalability " で、スレッドを作成するコストは約 200,000 サイクル、破棄するコストは約 100,000 サイクルであると述べています。
いくつかの計算を実行するために新しいスレッドを作成しようとするとき、計算自体が 200,000 サイクルよりも高価であることを確認したいと思います。
CPUサイクルを測定するにはどうすればよいですか? 実行時間を計測するより面白いと思います。
Joe Duffy は、MSDN の記事 " Using concurrency for scalability " で、スレッドを作成するコストは約 200,000 サイクル、破棄するコストは約 100,000 サイクルであると述べています。
いくつかの計算を実行するために新しいスレッドを作成しようとするとき、計算自体が 200,000 サイクルよりも高価であることを確認したいと思います。
CPUサイクルを測定するにはどうすればよいですか? 実行時間を計測するより面白いと思います。
Intel の Vtune などのサンプリング プロファイラーを使用して、測定対象のシステムで最小量の障害が発生した場合に消費される CPU サイクル数を測定できます。
ただし、スレッドを使用する場合の目標は、新しいスレッドを不必要に生成しないようにすることです。スレッドプールの使用を検討してください。これにより、作業項目を非同期で実行できますが、項目ごとに新しいスレッドを生成する必要はありません。
System.Diagnostic 名前空間を確認します。メモリとCPUの使用状況を追跡するためのものがたくさんあります。
私は数日前に密接に関連する質問をしましたが、コードの実際の CPU サイクル使用量を測定する方法をまだ見つけていません: CPU サイクルの アセンブリ実行数を制限する
あなたの場合、計算のプロファイリングを実行して、単一の計算にかかる時間を確認し、それを計算を実行するスレッドを生成して後でスレッドを強制終了する合計時間と比較できませんか?
CPUサイクルのカウントに関する問題は次のとおりです。CPU が異なれば、同じ命令を実装するのに必要なサイクル数も異なります。そのため、信頼できるメトリック IMO ではありません。測定する必要があるのは実行時間だと思います。.NET では、System.Environment.TickCount を使用してこれを達成します。私はそれがあなたが持っている最高のものだと思います...