У меня есть сценарий, в котором некоторые функции должны выполняться как можно быстрее и им должны быть предоставлены вычислительные ресурсы за счет других задач (т.е.они имеют высокий приоритет). В частности, рендеринг графики и любые задачи, порождаемые для рендеринга, должны выполняться как можно быстрее, но не использовать полную мощность ЦП. Одновременно я хочу заполнить пустые циклы ЦП другой работой, которая не так критична по времени, и следить за тем, чтобы не украсть циклы у задач рендеринга.
Основная идея довольно проста, но я не могу понять, как делать то, что я хочу, через PPL. Я нашел, как установить в планировщике по умолчанию разные приоритеты, но я не хочу глобально менять приоритет. Скорее, я хочу иметь две отдельные политики планирования, в которые я могу добавлять задачи в любое время.
Идеальная ситуация - если бы я мог создать два экземпляра task_group с разными приоритетами и добавлять задачи в соответствующую группу по мере необходимости, но я не знаю, как это сделать. Я связал наиболее подходящую документацию, которую я нашел, которая делает то, что я хочу, но использует агентов таким образом, что я не уверен, как выполнить простое действие - просто добавить задачу. Я бы также предпочел не добавлять сложность агентов и передачи сообщений, если я могу использовать базовые возможности PPL.
https://msdn.microsoft.com/en-us/library/dd984038.aspx
Также важно, чтобы я мог гарантировать, что любые подзадачи, порожденные потоком, наследуют приоритет родителя. В частности, я вызываю parallel_for из задач с высоким и низким приоритетом, и блоки parallel_for должны сохранять одинаковый приоритет.