【发布时间】:2019-11-19 08:21:42
【问题描述】:
我想降低线程的优先级。
我的线程的默认策略是SCHED_OTHER,我的系统(Ubuntu)下的优先级范围是[0,0](我通过sched_get_priority_min(SCHED_OTHER)和sched_get_priority_max(SCHED_OTHER)得到范围)这意味着所有线程SCHED_OTHER 将具有相同的优先级。
有没有办法降低SCHED_OTHER 的优先级?我已经搜索了一段时间,我找到了nice 值系统,但不确定这是否是正确的方法,因为man page 说好的值是针对进程而不是线程,我很困惑...
谁能给出正确的解决方案来做到这一点,也许用一个短代码sn-p?谢谢!
添加:
为什么要降低线程的优先级:
我有一个工作线程,它定期进行一些密集的计算(例如,每分钟几秒钟,因此会导致一些 CPU 使用高峰),我的整个系统将经历周期性的性能下降。但是这个工作线程的优先级很低,只要能在下一分钟之前完成计算就可以了。所以我想在这个时间窗口平滑地摊销这个任务的计算。
【问题讨论】:
-
pthread_setschedparam -
这听起来像an XY problem。对于什么问题,您决定降低线程优先级是解决方案吗?
-
请注意,在 Linux(和大多数其他 Unix 操作系统)中,默认调度程序(又名 SCHED_OTHER)会在发现线程使用大量 CPU 周期时自动降低线程的优先级。因此,如果您担心 CPU 繁重的计算线程可能会阻止大部分空闲,例如需要低延迟的 GUI 线程,那么操作系统可能已经自动为您处理了该问题。
-
@JeremyFriesner 我已经更新了一些关于我的情况的描述,默认的系统调度可能无法处理我的问题,所以我想手动降低线程的优先级。根据我的情况有什么建议吗?
-
@AndrewHenle 感谢您的建议,我已经更新了我的问题以澄清我的情况,有什么建议吗?
标签: c++ c linux multithreading pthreads