c# - Process.ProcessorAffinity和Thread.ProcessorAffinity之间的区别

如果我的应用程序启动了这样的过程:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "Notepad.exe";
Process proc = Process.Start(psi);
proc.ProcessorAffinity = new IntPtr(1); 


与此有何不同:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "Notepad.exe";
Process proc = Process.Start(psi);
var threads = proc.Threads;

foreach (var thread in threads)
{
    thread.ProcessorAffinity = new IntPtr(1);
}


在每种情况下,流程在哪里运行?

最佳答案

如果在进程级别设置ProcessorAffinity,则所有进程的线程都将继承该相似性设置。来自MSDN


  代表处理器的位屏蔽
  关联的进程可以继续运行。


因此,两者之间的区别在于,如果您在线程级别分配亲和力,则可以将它们分配给多个处理器,并且将负载分配给所有分配给一个处理器的所有线程。

关于最后一点,“进程在哪里运行?”,不是运行的进程,而是线程,我认为答案从上面很清楚。