Многопоточное приложение win32 автоматически назначает потоки различным процессорам? - PullRequest
0 голосов
/ 07 октября 2019

В прошлом, когда я использовал управляемый .NET C #, я обнаружил, что если я просто создаю потоки и запускаю на них что-то, все потоки будут собираться на одном процессоре. Это не очень хорошо, когда программа запускает что-то, что требует большой производительности.

Когда я искал в Интернете, он рекомендовал функцию SetThreadAffinityMask в Windows API. В C # я могу только ВНЕШНИЕ из них.

Сейчас я работаю только над приложением Windows API. Я хочу знать, автоматически ли многопоточное приложение win32 назначает потоки различным процессорам. Если НЕТ, как получить AffinityMasks всех процессоров на компьютере (для использования SetThreadAffinityMask)?

Альтернативы, которые могут назначать потокик разным процессорам тоже все приветствуются.

1 Ответ

0 голосов
/ 08 октября 2019

На многопроцессорных компьютерах планировщик может перемещать отдельные потоки на разные процессоры, чтобы сбалансировать нагрузку на процессор. Похоже, что несколько потоков выполняются одновременно, поскольку исполняемые потоки распределяются между доступными процессорами. Это автоматически выполняется системой.

Если вы хотите принудительно запустить поток на определенном подмножестве процессоров, вы можете использовать привязку к потоку. Но используйте его с осторожностью, потому что:

Как правило, следует избегать установки соответствия потоков, поскольку это может помешать планировщику эффективно планировать потоки между процессорами. Это может снизить выигрыш в производительности при параллельной обработке. Надлежащее использование соответствия потоков - тестирование каждого процессора.

См. " Многопоточность с C и Win32 " " Многозадачность " " Несколько процессоров».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...