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

时间:2016-08-19 11:48:08

标签: c++ qt qthread thread-priority

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

  2. 这可能会损害其他一些操作吗?

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

3 个答案:

答案 0 :(得分:2)

  1. 与其他优先级较低的线程相比,调度程序将为该线程提供更多优先级。如果你要求一个永不产生的线程的最高优先级(例如,一个线程在没有阻塞系统调用的情况下进行“重”计算),你的低优先级线程可能会因为CPU时间而挨饿。

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

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

  2. 在大多数操作系统中,线程优先级以某种方式与进程优先级相结合,因此它不应该损害很多其他进程。

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

    正如我在评论中写的那样,通常安排恰恰相反 - 你给背景,CPU占用任务提供优先级;速度差异通常可以忽略不计(通常情况下,GUI线程和其他后台线程在大多数情况下都处于空闲状态,等待事件或定期轮询),但是当需要时它们会保持响应。

    高优先级线程的一种可能用途是用于软实时内容,其中你的线程需要每隔一段时间安排一次,抢占低优先级线程,快速完成它并回收CPU到调度程序。

答案 1 :(得分:2)

请记住,如果您提高主线程之外的任何线程的优先级,则表明线程正在执行的工作比保持用户界面响应所需的工作更重要。您的UI很乐意被最高优先级的线程抢占。

当响应的延迟很重要时,应该使用非常高优先级的线程。他们应该做必要的最少量的工作。在这种情况下,高线程优先级意味着只要线程可以运行,它就值得来烧掉执行上下文切换所需的CPU周期。那么最好是值得的。通常,您使用高优先级线程进行音频或机器通信 - 但请注意,例如,无论如何,设备驱动程序本身的Linux部分或其上面的层可以在较低优先级的线程中运行!

答案 2 :(得分:1)

  1. 通过在QT应用程序中使用 HighestPriority ,您可以为应用程序中的所有其他线程提供该特定线程优先级。如果您有多个线程并且希望确保后台线程不会从主线程中窃取CPU,这可能很有用。危害?除非被人为错误误用,否则不会造成太大的伤害。

  2. 除非您的应用程序占用通常由错误或设计不良的代码导致的cpu,否则不会造成太大的伤害。

  3. 当您的应用程序需要同时执行多项操作时使用它,但您希望确保,例如,主窗口保持响应。显然,您只需指定主窗口 HighestPriority