2009-11-02 684 views
55

从我过去读过的内容中,我们鼓励您不要以编程方式更改Windows应用程序的优先级,如果这样做,则不应将其更改为“实时”。什么是“实时”流程优先级设置?

与“高”和“高于正常”相比,“实时”进程优先级设置的作用是什么?

回答

65

的实时优先级的线程永远无法通过定时器中断捷足先登,并运行在更高的优先级比系统中的任何其他线程。因为这样一个CPU绑定的实时优先级线程可以完全破坏一台机器。

创建实时优先级线程需要特权(SeIncreaseBasePriorityPrivilege),因此它只能由管理用户完成。

对于Vista及更高版本,确实需要以实时优先级运行的应用程序的一种选择是使用Multimedia Class Scheduler Service(MMCSS)并让它管理线程优先级。 MMCSS将阻止您的应用程序使用太多的CPU时间,因此您不必担心机器出现故障。

+4

系统把一个随机过程(比如视频游戏)放在实时优先级上会是危险的吗?建议高优先级/该应用程序的性能下降会明显吗? – mrfred 2015-04-08 21:05:42

+9

@mrfred我不会说这很危险,只是如果它是一个大型程序,它会减慢整个系统。尝试将Minecraft的优先权设置为实时。相信我,这很有趣。您的鼠标速度变慢,按键需要5秒才能响应,并且explorer.exe变得无法响应! – 2015-07-08 01:36:30

+1

@mrfred我个人已经在一段时间内以高优先级和实时优先级运行skyrim,并且它使游戏运行得更加平滑,只有偶尔的音频制品(无论出于何种原因)。我从来没有遇到过这样做的任何问题......我认为,如果出现可怕的错误,系统至少会过热,但当然,我不知道可能会出错。也许有多个内核可以解决IO设备资源匮乏的问题。 – Totem 2016-06-28 17:00:23

22

简单地说,“实时”优先等级高于“高”优先等级。我认为除此之外还有更多。哦,是的 - 你必须让SeIncreaseBasePriorityPrivilege将线程放到实时课程中。

由于各种原因,Windows有时会提升线程的优先级,但不会将线程的优先级提高到另一个优先级。它也不会提高实时优先级中线程的优先级。所以高优先级的线程不会得到任何实时优先级的自动临时提升。

Russinovich编写的“Inside Windows的”在Windows上如何处理优先章是对学习有很大的资源是如何工作的:

注意,但绝对有具有真正的线没有问题在正常的Windows系统上享有优先权 - 它们不一定适用于在专用机器上运行的特殊进程。我认为多媒体驱动程序和/或进程可能需要具有实时优先级的线程。但是,这样的线程不应该需要太多的CPU - 为了正常的系统事件得到处理,应该阻塞大部分时间。

+6

是的,如果你有一个线程没有太多的事情要做,但是需要*来体验良好的响应时间,那么实时线程是合适的。 – Artelius 2009-11-02 23:31:57

+0

我知道这是一个旧帖子,但我发现那本书的章节真的很棒......让我走了! https://www.google.ca/search?q=C04X1116607.pdf&ie=utf-8&oe=utf-8&gws_rd=cr&ei=cSTqVJzQNvHnsATun4CIDA#q=X1116607.pdf – MotherDawg 2015-02-22 19:15:14

12

这将是可用的最高优先级设置,通常只用于专门运行该特定程序的盒子。它实际上足够高,它可能会导致键盘和鼠标线程的饥饿,从而导致它们不响应。

所以基本上,如果你要问,不使用它:)

+0

同意。了解它的含义非常重要(最重要的是该线程,最重要的是),但如果你发现自己问是否应该使用它,那么你绝对不应该这么做。 – 2009-11-02 22:27:26

+3

如果你不问如何使用它,你将如何学会使用它?我想你可以使用它,看看会发生什么,然后你会学到,但是我觉得你很沮丧学习 – fifamaniac04 2015-06-09 17:36:43

2

实时是最高优先级可用于进程。因此,它与“高”不同的是,它比“高”更大一些,而“高于正常”则更大。

同样,实时也是一个线程优先级。

进程优先级提升或降低进程中的所有有效线程优先级,因此被视为“基本优先级”。

所以,一个进程有:

  1. 基地进程优先级
  2. 个别线程优先级,基本优先级的偏移量。

由于实时应该被保留用于绝对必须抢先其他正在运行的进程的应用程序,有一个特殊的安全权限,以防止随意使用它。这由安全策略定义。

在NT6 +(Vista +)中,使用Vista多媒体类调度程序是在实时操作系统中实现而不是的实时操作的正确方法。它的工作原理大部分都不完美,因为操作系统不是为实时操作而设计的。

微软认为这个优先级非常危险,理所当然。除非是非常特殊的情况,否则任何应用程序都不应该使用它,甚至会尝试将其用于临时需求。

1

一旦Windows获知程序使用高于正常的优先级,它似乎会限制进程的优先级。

将优先级从IDLE设置为REALTIME不会改变CPU使用率。

我在我的多处理器AMD CPU上发现,如果我放弃其中一个CPU,就像LAST一样,CPU使用率将MAX OUT并且最后一个CPU保持空闲状态。我的四核AMD处理器速度提高到75%。

使用任务管理器 - >选择进程 - >右键单击进程 - >选择 - >设置亲和力 单击除最后一个处理器以外的所有处理器。如果处理视频会增加,CPU的使用率将增加到其余处理器的MAX和帧数。

+1

只要CPU没有争用,更改进程优先级不影响CPU利用率就是了。但是,你认为Windows根据CPU利用率限制最大进程优先级是错误的。相反,安全特权可防止设置“实时”以防止随意使用。 – 2014-08-15 20:31:15

+0

(阅读多年后) - 这里的问题是线程不能分割。所以,你可能有8个内核,但只有2个CPU绑定(100%活动)线程。因此,你说“为什么我的其他6芯使用?”。或者,就你而言,“为什么不是我使用的最后一个核心?”。剩下的核心似乎什么也不做。这就是你想要的。如果线程从核心转换为核心,则会降低性能。应用程序开发人员必须使用多线程,而不是一切都可以是多线程的。 – 2017-09-21 14:40:16

0

它在其他方面基本上更高/更高。键盘比实时过程更不重要。这意味着该过程将在键盘上被更快地考虑,如果它不能处理,那么你的键盘会变慢。

0

与实时之前的所有其他答案一样,该程序为最高优先级。在程序被处理之前没有任何处理。
在我的奔腾4机器上,我将minecraft设置为实时,因为它提高了游戏性能,而且系统似乎完全稳定。所以实时并不像看起来那么糟糕,就好像你有一个多核设置一个程序与特定内核或多个内核的亲和力(只是不是所有内核,只是为了让其他所有程序能够在实时情况下运行设置程序会挂起)并将优先级设置为实时。