特定のスレッドが実行されているCPUを特定する方法はありますか? C#では可能ですが、C++では可能です。スレッドが実行されているCPUを特定するにはどうすればよいですか?
.NET ProcessおよびProcessThreadクラスは、この情報を提供していないようです。
ETA明確化:
私たちは、HTTPマルチキャストストリームを処理し、複数のビデオエンコーダを生成しますサーバーアプリケーションを開発しています。これは12個の物理コアを持つシステム上で実行され、結果として24個の論理CPU(ハイパースレッディング)が発生します。 TaskManagerとProcessExplorerを使用して、生成されたプロセスが論理CPU上で均等に分散されていることを確認しました。しかし、私たちは、CPU時間の異常な量を食べることによって干渉する1つのCPU上で(カーネル?)活動の多くを見ている。この特定のCPUで実行されているプロセス(またはスレッド)を特定しようとしています。 TaskManagerもProcessExplorerもその情報を提供していないようです。もしそうなら、そのような情報がどのように得られるかを説明してください。
それ以外の場合は、この情報を取得するための独自のツールを作成することを検討しています。それが私たちが助けを必要とするものです。
スレッドアフィニティを変更する方法はわかっています(この特定のケースでは、CPUを使い果たしているスレッドは1つのCPUにしか関連付けられていませんが、スレッドがどのCPUにも関連付けられるという保証はありません)、しかしそうするためには、最初にどのプロセス/スレッドの再配置が必要かを判断する必要があります。それがこの質問の唯一の目的です。
これが問題の明確化に役立つことを望みます。
この情報でどのような問題を解決しようとしていますか? –
それはカーナルだけに知られています。だからあなたはカーネルモードでプログラムする必要があります。 MSDNでKernal APIを探します。 – Nawaz
異なる時間に多くの異なるCPU上でスレッドが実行された場合、どのようにしたいでしょうか? –