Несколько процессоров
Компьютеры с несколькими процессорами обычно предназначены для одной из двух архитектур: неоднородного доступа к памяти (NUMA) или симметричной многопроцессорной обработки (SMP).
На компьютере NUMA каждый процессор ближе к некоторым частям памяти, чем другие, что делает доступ к памяти быстрее для некоторых частей памяти, чем другие части. В модели NUMA система пытается запланировать потоки на процессорах, близких к используемой памяти. Дополнительные сведения о NUMA см. в поддержки NUMA.
На компьютере SMP два или более идентичных процессоров или ядер подключаются к одной общей основной памяти. В модели SMP любой поток можно назначить любому процессору. Таким образом, планирование потоков на компьютере SMP аналогично планированию потоков на компьютере с одним процессором. Однако планировщик имеет пул процессоров, чтобы он смог запланировать одновременный запуск потоков. Планирование по-прежнему определяется приоритетом потока, но оно может влиять на сопоставление потоков и идеальный обработчик потоков, как описано в этом разделе.
Сходство потоков
сопоставление потоков заставляет поток выполняться в определенном подмножестве процессоров. Как правило, следует избежать сопоставления потоков, так как это может повлиять на возможность планировщика эффективно планировать потоки между процессорами. Это может снизить производительность, полученную параллельной обработкой. Соответствующее использование сходства потоков проверяет каждый процессор.
Система представляет сходство с битовой маской, называемой маской сходства процессора. Маска сходства — это размер максимального количества процессоров в системе, при этом биты задаются для определения подмножества процессоров. Изначально система определяет подмножество процессоров в маске.
Текущее сходство потоков для всех потоков процесса можно получить, вызвав функцию GetProcessAffinityMask. Используйте функцию setProcessAffinityMask, чтобы указать сходство потоков для всех потоков процесса. Чтобы задать сходство потоков для одного потока, используйте функцию SetThreadAffinityMask. Сходство потоков должно быть подмножеством сходства процесса.
В системах с более чем 64 процессорами маска сходства изначально представляет процессоры в одной группе процессоров. Однако сопоставление потоков может быть задано обработчиком в другой группе, которая изменяет маску сходства для процесса. Дополнительные сведения см. в группах обработчиков.
Идеальный обработчик потока
При указании идеального потокапланировщик запускает поток на указанном процессоре, когда это возможно. Используйте функцию SetThreadIdealProcessor, чтобы указать предпочтительный процессор для потока. Это не гарантирует, что идеальный процессор будет выбран, но предоставляет полезное указание планировщику. В системах с более чем 64 процессорами можно использовать функцию SetThreadIdealProcessorEx для указания предпочтительного процессора в определенной группе процессоров.
Связанные разделы