Выделение определенных логических ядер исключительно определенным процессам, Windows, C++

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

Я знаю, что Winbase.h содержит Get/SetProcessAffinityMask и SetThreadAffinityMask.

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

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

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

Как вы думаете, почему вам нужно это делать?

1201ProgramAlarm 22.04.2019 02:34

Дубликат stackoverflow.com/q/40453645/103167

Ben Voigt 22.04.2019 03:56

@ 1201ProgramAlarm, зачем мне это нужно, так это не столько о сроках и информатике, сколько о контрактах и ​​требованиях клиентов.

keoxkeox 22.04.2019 07:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
126
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме