【问题标题】:Set priority of PPL thread groups设置 PPL 线程组的优先级
【发布时间】:2015-06-03 01:45:41
【问题描述】:

我有一个场景,其中一些功能需要尽快完成,并以牺牲其他任务为代价获得计算资源(即它们是高优先级的)。具体来说,图形渲染以及为渲染而生成的任何任务都应尽可能快地运行,但不要消耗全部 CPU 容量。同时,我想用其他对时间要求不高的工作来填充 CPU 的空周期,并确保不要从渲染任务中窃取周期。

基本思想相当简单,但我无法弄清楚如何通过 PPL 做我想做的事。我已经找到了如何将默认调度程序设置为不同的优先级,但我不想全局更改优先级。相反,我希望有两个不同的调度策略,我可以随时向其中添加任务。

理想的情况是,如果我可以创建两个具有不同优先级的 task_group 实例,并根据需要将任务添加到相关组,但我不知道该怎么做。我链接了我找到的最相关的文档,它可以满足我的需求,但使用代理的方式让我不确定如何执行仅添加任务的简单操作。如果我可以使用 PPL 中的基本功能,我也宁愿不增加代理和消息传递的复杂性。

https://msdn.microsoft.com/en-us/library/dd984038.aspx

同样重要的是,我可以确保从线程产生的任何子任务都继承父线程的优先级。具体来说,我从高优先级和低优先级任务中调用 parallel_for,并且 parallel_for 块应该保持相同的优先级。

【问题讨论】:

    标签: multithreading concurrency scheduler thread-priority ppl


    【解决方案1】:

    任务构造函数(和 create_task 函数)可以使用自定义调度程序的 task_options 参数。

    https://msdn.microsoft.com/en-us/library/dn237306.aspx

    【讨论】:

    • 如何创建一个自定义调度程序来输入task_options?我找不到任何明显的方法来创建或实现这样的调度程序。请注意,由concurrency::Scheduler::Create 创建的调度程序不会这样做,因为这是一个concurrency::IScheduler,而不是必需且显然不相关的concurrency::scheduler_interface
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多