Powershell 4 - Настройка сродства процессора для пространств выполнения и нескольких потоков

Я хотел бы установить привязку к процессору для нескольких конкретных потоков.

Все ссылки, которые я нашел до сих пор, касаются установки сродства к процессору процесса (PID), но не потока. Есть ли способ добиться этого при использовании .Net Runspaces? Или я пытаюсь сделать невозможное?

Основная идея такова: у меня есть 20-ядерный блок, и я хотел бы, чтобы потоки равномерно распределялись между ядрами. В противном случае все они будут работать на одном сердечнике.

Спасибо!


person Jeremy    schedule 09.06.2014    source источник
comment
20 ядер! Ты полный отстой! ;-) Как вы запускаете дополнительные потоки? Вы используете RunspacePool или что-то еще?   -  person Keith Hill    schedule 09.06.2014
comment
Ага ... это большая коробка :-) Да, я использую пулы runspace.   -  person Jeremy    schedule 10.06.2014


Ответы (1)


Я не уверен насчет оболочки .Net, но Win32 api SetThreadAffinityMask делает то, что вам нужно - см. Документацию здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686247 (v = vs.85) .aspx .

person Jason Shirk    schedule 09.06.2014
comment
Я не уверен, как это связано с Runspaces. Не думаю, что у вас есть примеры? - person Jeremy; 10.06.2014
comment
Пример: khason.net/blog/ - person Jason Shirk; 10.06.2014
comment
У пространств выполнения есть свойство ThreadOptions - если вы используете ReuseThread (для пулов пространств выполнения) или UseCurrentThread, вы можете быть уверены, что пространство выполнения не создает новые потоки, поэтому достаточно установить привязку потоков один раз для каждого пространства выполнения. - person Jason Shirk; 10.06.2014