Я хотел бы написать программу, в которой несколько рабочих потоков должны обрабатывать разные задачи с разными приоритетами. Большие задачи будут обрабатываться с низким приоритетом и небольшие задачи с очень высоким приоритетом.
В идеальном мире я бы просто устанавливал разные приоритеты для каждого вида задач, но, поскольку в Windows доступно больше типов задач, чем уровней приоритетов, я думаю, что мне нужно устанавливать приоритеты потоков динамически.
Я думаю, что должен быть основной поток с наивысшим приоритетом, работающий как своего рода планировщик, устанавливающий приоритеты рабочих потоков динамически. Но мне интересно, что на самом деле происходит в Windows, когда я вызываю SetThreadPriority (), и особенно то, как быстро операционная система учитывает изменение приоритета.
В идеале мне нужно повысить приоритет «небольшого потока задач» внутри < 1 мс Это возможно? И есть ли способ изменить время ожидания ОС (если есть), реагируя на изменение приоритета?
Диспетчер окон (планировщик) не является отдельным процессом / потоком; это распространяется по всему ядру. Диспетчер обычно запускается следующими событиями:
SetThreadPriority
)Мне нужно повысить приоритет «небольшого потока задач» внутри < 1 мс Это возможно?
Согласно 3: да, диспетчер перенесет немедленно.
Ref .: Windows Internals Tour: процессы Windows, потоки и
объем памяти, Microsoft Academic Club 2011
Других решений пока нет …