有没有办法确定一个线程在哪个CPU上运行?
最好用C#,但是C++也可以。
.NET的Process和ProcessThread类似乎没有提供这个信息。
预计时间澄清: 我们正在开发一个处理http多播流并生成多个视频编码器的服务器应用程序。这在拥有12个物理核心的系统上运行,导致24个逻辑CPU(超线程)。通过TaskManager和ProcessExplorer,我们已经验证了我们生成的进程均匀地分布在逻辑CPU上。然而,我们看到只有一个CPU上有大量的(内核?)活动,导致异常消耗CPU时间。我们正在尝试确定运行在这个特定CPU上的哪些进程/线程。TaskManager和ProcessExplorer都不提供此信息。如果它们提供,请解释如何获取此类信息。 否则,我们正在考虑编写自己的工具以获取此信息。这就是我们需要帮助的地方。 我们知道如何更改线程的关联(并且我们知道没有保证线程将保持与任何CPU相关联,尽管在这种特殊情况下,占用CPU的线程仅与一个CPU相关联),但是为了这样做,我们需要首先确定需要重新定位的进程/线程。这是这个问题唯一的目标。 我希望这有助于澄清问题。
预计时间澄清: 我们正在开发一个处理http多播流并生成多个视频编码器的服务器应用程序。这在拥有12个物理核心的系统上运行,导致24个逻辑CPU(超线程)。通过TaskManager和ProcessExplorer,我们已经验证了我们生成的进程均匀地分布在逻辑CPU上。然而,我们看到只有一个CPU上有大量的(内核?)活动,导致异常消耗CPU时间。我们正在尝试确定运行在这个特定CPU上的哪些进程/线程。TaskManager和ProcessExplorer都不提供此信息。如果它们提供,请解释如何获取此类信息。 否则,我们正在考虑编写自己的工具以获取此信息。这就是我们需要帮助的地方。 我们知道如何更改线程的关联(并且我们知道没有保证线程将保持与任何CPU相关联,尽管在这种特殊情况下,占用CPU的线程仅与一个CPU相关联),但是为了这样做,我们需要首先确定需要重新定位的进程/线程。这是这个问题唯一的目标。 我希望这有助于澄清问题。