我有延迟关键代码,我在那里旋转等待。我想在专用内核上运行它(完全我有12个内核,因此可以只为这个任务花费一个内核)。 我试着这样做:
new Thread(Work).Start();
private void Work()
{
Process Proc = Process.GetCurrentProcess();
ProcessThread Thread = Proc.Threads[0];
var AffinityMask = 0x0002; // use only the second processor, despite availability
Thread.ProcessorAffinity = (IntPtr)AffinityMask;
while (true)
{
Iterate();
}
}
我期待在设置ProcessorAffinity之后,我的线程将始终在第二个核心上运行,因此我也将在第二个核心处拥有100%。 但是在任务管理器中,我没有看到任何“100”占用的核心。为什么?如何在专用核心上启动自旋等待线程?
更新现在我觉得这可能是错误的Proc.Threads[0]
?我需要current
线程而不是0
线程?
答案 0 :(得分:0)
你不会因为你在那个线程上设置线程关联而不会看到100%,因为操作系统仍然会在该核心上安排其他线程,而你的线程只会获得一部分周期。
如果您还设置了Process.BasePriority = RealTime和Thread.Priority = Highest,那么您可能会在该核心上看到 close 达到100%。 (我不建议在生产代码中使用它。)
根据 对您的操作的时间要求如何,.Net平台可能还不够。