Изменения приоритета задержки применяются к потоку

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

В идеальном мире я бы просто устанавливал разные приоритеты для каждого вида задач, но, поскольку в Windows доступно больше типов задач, чем уровней приоритетов, я думаю, что мне нужно устанавливать приоритеты потоков динамически.

Я думаю, что должен быть основной поток с наивысшим приоритетом, работающий как своего рода планировщик, устанавливающий приоритеты рабочих потоков динамически. Но мне интересно, что на самом деле происходит в Windows, когда я вызываю SetThreadPriority (), и особенно то, как быстро операционная система учитывает изменение приоритета.

В идеале мне нужно повысить приоритет «небольшого потока задач» внутри < 1 мс Это возможно? И есть ли способ изменить время ожидания ОС (если есть), реагируя на изменение приоритета?

1

Решение

Диспетчер окон (планировщик) не является отдельным процессом / потоком; это распространяется по всему ядру. Диспетчер обычно запускается следующими событиями:

  1. Поток становится готовым к выполнению
  2. Поток покидает состояние выполнения (например, квант истекает, состояние ожидания или завершено)
  3. Изменяется приоритет потока (например, SetThreadPriority)
  4. Изменения сродства процессора

Мне нужно повысить приоритет «небольшого потока задач» внутри < 1 мс Это возможно?

Согласно 3: да, диспетчер перенесет немедленно.

Ref .: Windows Internals Tour: процессы Windows, потоки и
объем памяти
, Microsoft Academic Club 2011

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]