0

我在旋转等待的地方有延迟关键代码。我想在专用核心上运行它(我总共有 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线程?

4

1 回答 1

0

您不会看到 100% 仅仅因为您已经在该线程上设置了线程关联,因为操作系统仍会在该内核上调度其他线程,而您的线程只会获得一部分周期。

如果您还设置 Process.BasePriority = RealTime 和 Thread.Priority = Highest,那么您可能会在该核心上看到接近100% 的内容。(我不会在生产代码中推荐这个)。

根据的操作的时间紧迫性,.Net 平台可能还不够。

于 2013-02-18T10:47:50.280 回答