0

スピン待機するレイテンシクリティカルなコードがあります。専用コアで実行したい(合計で12コアあるので、そのタスクのためだけに1コアを使用してもかまいません)。私はそれをこのように達成しようとしました:

    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を設定した後、私のスレッドは常に2番目のコアで機能するので、2番目のコアでも100%になると期待していました。ただし、タスクマネージャーでは、「100」個の占有コアは表示されません。なんで?専用コアでスピンウェイトスレッドを起動するにはどうすればよいですか?

upd今私はおそらくこれが間違っていると思いますProc.Threads[0]か?currentスレッドではなくスレッドが必要0ですか?

4

1 に答える 1

0

その1つのスレッドにスレッドアフィニティを設定したからといって、100%が表示されるわけではありません。これは、OSがそのコアで他のスレッドをスケジュールし、スレッドがサイクルの一部しか取得しないためです。

Process.BasePriority=RealTimeおよびThread.Priority=Highestも設定すると、そのコアで100%に近いものが表示される場合があります。(本番コードではこれをお勧めしません)。

ただし、操作のタイムクリティカル度によっては、.Netプラットフォームでは不十分な場合があります

于 2013-02-18T10:47:50.280 に答える