Выделение определенных логических ядер исключительно для определенных процессов, Windows, C ++ - PullRequest
0 голосов
/ 22 апреля 2019

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

Мне известно, что Winbase.h содержит Get / SetProcessAffinityMask и SetThreadAffinityMask.

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

Кроме того, будут другие процессы, которые должны использовать исключительно определенные логические ядра (никакой другой процесс не должен тратить ресурсы на это логическое ядро). Например, мой процесс должен работать на ядре 15, а другой должен работать только на ядре 14.

Существует ли лучший и более постоянный способ выделения определенных логических ядер для конкретных процессов, чем упомянутая выше схема Get / SetProcessAffinityMask.

1 Ответ

1 голос
/ 22 апреля 2019

Windows не является операционной системой реального времени. Windows предназначена для упреждающей многозадачности с изолированными процессами, как и любая другая современная настольная ОС. Не предполагается, что процесс просто блокирует все остальные процессы от конкретного ядра, поэтому нет API, который бы делал это явно (по крайней мере, я не знаю ни одного). Планировщик ОС должен решить, какие потоки запускать, когда и где. Вот и вся идея. Вы можете использовать приоритеты потоков , чтобы сообщить планировщику, что некоторым потокам нужно дать возможность работать поверх других. Вы можете использовать аффинные маски , чтобы сообщить планировщику, на какие ядра можно запланировать поток. Вы даже можете установить предпочтительное ядро ​​для своей нити . Но вы не можете сами планировать темы.

Обратите внимание, что, очевидно, есть способ получить что-то похожее на то, что вы ищете для работы в Linux (см. в этом вопросе для получения дополнительной информации). Я не думаю, что подобные возможности существуют в Windows. Да, вы можете попытаться объединить какое-то решение, основанное на фоновой задаче, которая непрерывно контролирует и корректирует приоритеты и маски сходства всех потоков в системе, чтобы приблизить желаемое поведение (например, человек в вопросе, связанном Беном Войгтом). выше , видимо, пытался, и не удалось достичь). Но почему вы хотите это сделать? Это полностью противоречит самой природе всего, для чего предназначена ОС, подобная Windows. Для меня то, что вы спрашиваете, звучит очень похоже на то, что вы действительно ищете, это совершенно другой тип операционной системы, или, может быть, даже вообще никакой операционной системы. Загрузите процессор прямо в свой собственный образ, и вы сможете управлять всеми ядрами так, как вам нравится & hellip;

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