我们可以在C#应用程序中设置两个线程或两个任务以不同的处理器亲和力执行吗?
我已经阅读了有关SetThreadAffinityMask
的信息,但没有找到应如何使用它的示例。
另外,TPL(任务并行库)是否可以执行两个优先级高的线程/任务以使用100%CPU?
最佳答案
Process
和ProcessThread
对象具有ProcessorAffinity
类型的IntPtr
属性,可以直接对其进行操作以读取/更改最多64个处理器的相似性:using System.Diagnostics;... Process Proc = Process.GetCurrentProcess(); long AffinityMask = (long)Proc.ProcessorAffinity; AffinityMask &= 0x000F; // use only any of the first 4 available processors Proc.ProcessorAffinity = (IntPtr)AffinityMask; ProcessThread Thread = Proc.Threads[0]; AffinityMask = 0x0002; // use only the second processor, despite availability Thread.ProcessorAffinity = (IntPtr)AffinityMask;...
您还可以使用线程的IdealProcessor
属性,使调度程序更喜欢在指定处理器上运行线程(无保证)。
是的,就是这么简单:)
引用:MSDN ProcessThread.ProcessorAffinity Property
关于c# - 如何在.NET中设置处理器关联性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2510593/