c++ - 我什么时候应该使用 QThread::HighestPriority

标签 c++ qt qthread thread-priority

  1. QThread (QThread::HighestPriority) 中使用HighestPriority 有什么好处和坏处?

  2. 这会损害其他操作吗?

  3. 我应该什么时候使用它?

最佳答案

  1. 与其他优先级较低的线程相比,调度程序会为该线程提供更高的优先级。如果您向永不屈服的线程请求最高优先级(例如,执行“繁重”计算但从未执行阻塞系统调用的线程),您的低优先级线程可能会因 CPU 时间不足而挨饿。

    一个典型的例子是高优先级的工作线程与 GUI 线程竞争 CPU - 您的 GUI 可能在大多数时间都没有响应。

    当然,详细信息将取决于运行您的应用程序的操作系统的调度程序的确切工作方式。在 Windows 上,即使工作线程与 GUI 线程以相同的优先级竞争,我也有过糟糕的经历。最近的 Linux 内核在这方面感觉好多了。

  2. 在大多数操作系统上,线程优先级以某种方式与进程优先级结合在一起,因此它不会损害太多其他进程。

  3. 就我个人而言,我从未使用过它。

    正如我在评论中所写,通常安排是相反的——你给后台、占用 CPU 的任务优先级;速度差异通常可以忽略不计(通常 GUI 线程和其他后台线程大部分时间都处于空闲状态,等待事件或定期轮询),但您可以让它们在需要时保持响应。

    高优先级线程的一个可能用途是软实时,你的线程需要经常被调度,抢占低优先级线程,快速完成它的事情并返回CPU 到调度程序。

关于c++ - 我什么时候应该使用 QThread::HighestPriority,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39038349/

相关文章:

c++ - 在 GDB (C++) 中找到指向单例事后分析的指针

c++ - 错误:参数4从 'const ServerLogInfo'到 'ServerLogInfo&'的未知转换

c++ - Worker/Controller 多线程和接口(interface)类

python - PyQt4 导致 QThread 错误

c++ - 广度优先搜索中的问题

c++ - 参数类型 'void' 不完整

c++ - QMake 'subdirs' 模板 - 执行目标?

qt - QML 表单布局

c++ - 具有多个父项目的 Qt 树模型

c++ - 在 QThread 中启动 QTimer