QThread::start(优先级) vs Linux

Posted

技术标签:

【中文标题】QThread::start(优先级) vs Linux【英文标题】:QThread::start(priority) vs Linux 【发布时间】:2019-03-20 10:11:43 【问题描述】:

我在 KDE Neon 18.04(基于 Ubuntu 18.04,内核 4.15.0-46-generic)中使用了一些基于 QThread 的工作线程。工作线程干扰了我的桌面应用程序,所以我决定降低它们的优先级。

QThread::start(priority) 的 Qt 文档说:

优先级参数的效果取决于操作 系统的调度策略。特别是,优先级将是 在不支持线程优先级的系统上被忽略(例如 Linux,请参阅http://linux.die.net/man/2/sched_setscheduler 了解更多信息 详情)。

阅读上述文档后,我预计优先级不会对我的 Linux 系统产生影响。我还是试了一下。猜猜看 - 它运行良好。

那么,为什么 Qt 文档声明 Linux 上没有线程优先级?为什么它仍然有效?

【问题讨论】:

【参考方案1】:

根据您使用的 Linux/Unix/*Nix 的风格,调度程序可能支持也可能不支持。据我所知,现在大多数 Linux 系统都支持 Qt 的大多数优先级,但不是所有的优先级。我怀疑文档说它不受支持,因此他们不需要列出支持优先级以及支持哪些级别的操作系统变体和调度程序变体的每个组合。

您可以通过使用htoptop 并使用awk 进行处理来验证它是否具有正确的优先级:https://unix.stackexchange.com/questions/19301/what-is-a-command-to-find-priority-of-process-in-linux

【讨论】:

Linux 和其他 Unix 几乎总是允许您使用较低的优先级,但没有特别许可则不允许使用较高的优先级。例如,QThread::TimeCriticalPriority 不太可能起作用。

以上是关于QThread::start(优先级) vs Linux的主要内容,如果未能解决你的问题,请参考以下文章

QThread 的started() 信号没有发出

Qt 多线程和网络编程学习

VS2013 EMMET插件学习

HTML中,li元素定义了样式,然后再某个li元素定义了某class,发现这个class无效,求解释

Python 运算符优先级 - 和 vs 大于

数组 vs. 向量 vs. Boost::arrays