我有一个场景,其中一些功能需要尽快完成,并以牺牲其他任务为代价获得计算资源(即它们是高优先级的)。具体来说,图形渲染以及为渲染而生成的任何任务都应尽可能快地运行,但不要消耗全部 CPU 容量。同时,我想用其他对时间要求不高的工作来填充 CPU 的空周期,并确保不要从渲染任务中窃取周期。
基本思想相当简单,但我无法弄清楚如何通过 PPL 做我想做的事。我已经找到了如何将默认调度程序设置为不同的优先级,但我不想全局更改优先级。相反,我希望有两个不同的调度策略,我可以随时添加任务。
理想的情况是,如果我可以创建两个具有不同优先级的 task_group 实例,并根据需要将任务添加到相关组,但我不知道该怎么做。我链接了我找到的最相关的文档,它可以满足我的需求,但使用代理的方式让我不确定如何执行仅添加任务的简单操作。如果我可以使用 PPL 中的基本设施,我也宁愿不增加代理和消息传递的复杂性。
https://msdn.microsoft.com/en-us/library/dd984038.aspx
同样重要的是,我可以确保从线程产生的任何子任务都继承父线程的优先级。具体来说,我从高优先级和低优先级任务中调用 parallel_for,并且 parallel_for 块应该保持相同的优先级。