2014-12-11 5 views
1

Если мое приложение начинается процесс, как это:разница между 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); 
} 

В каждом случае, где делают процессы бег?

ответ

1

Если вы установите ProcessorAffinity на уровне процесса, все потоки процесса наследуют эту настройку близости. От MSDN

битовая маска, представляющая процессоры, что нити в соответствующем процессе могут работать на.

Таким образом, разница между ними заключается в том, что если вы назначаете аффинность на уровне нити, вы можете назначить их более чем одному процессору и распределить нагрузку больше, чем со всеми потоками, назначенными одному процессору.

Что касается вашей последней точки, «где выполняются процессы?», Это не процессы, которые выполняются, это потоки, и я думаю, что ответ ясно из сказанного выше.

+0

Спасибо за ответ, я считаю, что это охватывает все то, что я хотел узнать из моего вопроса. – rocklobster

2

Одна разница, которая выпрыгивает, вторая не влияет на новых нитей, которые начинаются позже.

+0

Спасибо за ответ. – rocklobster