0

我想降低为 parallel_for_each 服务的线程的线程优先级,因为在负载较重的情况下,相对于我系统中的其他线程,它们消耗过多的处理器时间。

问题:

1) parallel_for_each 的服务线程是否继承调用线程的线程优先级?在这种情况下,我大概可以在 parallel_for_each 之前和之后调用 SetThreadPriority,一切都应该没问题。

2) 或者是否建议在parallel_for_each 中调用SetThreadPriority?这显然会为同一个线程多次调用 API。这样做有很大的开销吗?

2.b)假设我这样做,它会在下次调用parallel_for_each 时影响线程优先级 - 即我是否需要在之后以某种方式重置每个线程的优先级?

3)我想知道一般的线程优先级。有人想评论一下吗:假设我有 2 个线程争夺一个处理器,一个设置为“低于正常”,而另一个设置为“正常”优先级。与另一个线程相比,一个线程的处理器时间大约多出百分之几?

4

1 回答 1

1
  1. 所有线程最初都从THREAD_PRIORITY_NORMAL. 所以你必须降低每个线程的优先级。或者降低拥有进程的优先级。

  2. 调用的开销很小SetThreadPriority。一旦你唤醒了一个线程,额外的调用成本SetThreadPriority就可以忽略不计了。一旦您设置了线程的优先级,它将保持该值直到更改。

  3. 假设您有一个处理器和两个准备运行的线程。调度程序将始终选择运行具有更高优先级的线程。这意味着在您的场景中,以下正常线程将永远不会运行。实际上,调度远不止这些。例如优先级反转。但是,您可以这样想。如果所有处理器都忙于正常优先级的线程,那么预计较低优先级的线程将缺乏 CPU。

于 2012-09-10T17:00:37.770 回答