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

When should I use QThread::HighestPriority

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

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

  3. 什么时候用?

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

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

  3. 当您的应用程序需要同时执行多项操作但又想确保主要 window 保持响应时使用它。显然,要这样做,您只需分配主要 window HighestPriority

  1. 与其他优先级较低的线程相比,调度程序将给予该线程更高的优先级。如果您向永不屈服的线程请求最高优先级(例如,执行 "heavy" 计算但从未执行阻塞系统调用的线程),您的低优先级线程可能会饿死 CPU 时间。

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

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

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

  3. 就个人而言,我从来没有用过它。

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

    高优先级线程的一种可能用途是软实时,您的线程需要每隔一段时间就被调度一次,抢占低优先级线程,做它自己的事情迅速将 CPU 返回给调度程序。

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

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