在C#中如何找到我的线程正在运行的处理器?

4
在C#中,如何查找执行线程的处理器?

2
它是左边的那个...(无论方向如何)。 - cjk
1
如果这是一个答案,我肯定会按下箭头...让你猜猜是哪个方向。 - luvieere
3个回答

4

这不一定是个常数 - 线程在其生命周期内可以被调度到不同的核心上。如果需要,您可以设置亲和性掩码来将特定的线程绑定到特定的CPU。有关 .Net 中可以执行的更多详细信息,请参阅 Thread.BeginThreadAffinity API 文档


1

在我看来,.NET线程可能没有绑定到任何本地线程。.NET运行时可以随时将.NET线程移动到不同的本地线程和处理器。


1
这曾经尝试过,但被放弃了。目前没有CLR版本可以使线程不匹配操作系统线程。考虑到在纤程(fibers)方面的严重失败(一个SQL Server团队项目),这种情况不太可能很快改变。 - Hans Passant

1

我不确定你是否可以这样做。你可以获取进程亲和性掩码(GetProcessAffinityMask),并设置相同的掩码(SetProcessAffinityMask)。你也可以设置线程亲和性掩码,但我的理解是这样做会限制线程只能在你设置的亲和性掩码之一的处理器上运行。

如果你要深入研究在特定核心上运行的特定线程,那么你可能需要设置进程亲和性掩码来定义代码可运行的核心集合,然后你进程中的线程将在选定的核心之间浮动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接