Если возможно, я хочу выделить логическое ядро исключительно для одного процесса.
Я знаю, что Winbase.h содержит Get/SetProcessAffinityMask и SetThreadAffinityMask.
Я могу запустить все процессы при запуске определенного процесса и установить их сходство с другими логическими ядрами, однако я не хочу периодически проверять все процессы, например, для того, чтобы иметь дело с процессами, запущенными после запуска моего обработать.
Кроме того, будут другие процессы, которым необходимо исключительно использовать определенные логические ядра (ни один другой процесс не должен тратить ресурсы на это логическое ядро). Например, мой процесс будет работать на ядре 15, а другой — только на ядре 14.
Есть ли лучший и более постоянный способ выделения конкретных логических ядер конкретным процессам, чем упомянутая выше схема Get/SetProcessAffinityMask.
Дубликат stackoverflow.com/q/40453645/103167
@ 1201ProgramAlarm, зачем мне это нужно, так это не столько о сроках и информатике, сколько о контрактах и требованиях клиентов.





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