什么是“实时”进程优先级设置?

Posted

技术标签:

【中文标题】什么是“实时”进程优先级设置?【英文标题】:What is the 'realtime' process priority setting for? 【发布时间】:2010-12-12 10:46:12 【问题描述】:

根据我过去阅读的内容,我们鼓励您不要以编程方式更改 Windows 应用程序的优先级,如果这样做,则永远不要将它们更改为“实时”。

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

【问题讨论】:

【参考方案1】:

实时优先级线程永远不会被定时器中断抢占,并以高于系统中任何其他线程的优先级运行。因此,受 CPU 限制的实时优先级线程完全可以毁掉一台机器。

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

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

【讨论】:

将单个随机进程(如视频游戏)置于实时优先级是否会对系统造成危险?是否会推荐高优先级/该应用程序是否会出现明显的性能下降? @mrfred 我不会说这很危险,只是如果它是一个大型程序,它会减慢整个系统的速度。尝试将 Minecraft 的优先级设置为实时。相信我,这很有趣。您的鼠标变慢,按键需要 5 秒才能响应,并且 explorer.exe 变得无响应! @mrfred 我个人已经连续几个月以高实时优先级运行天际,它使游戏运行更加流畅,只有偶尔的音频伪影(无论出于何种原因)。我从来没有因为这样做而遇到任何问题......我认为如果出现可怕的错误,系统至少会过热,但当然,我真的不知道会出现什么问题。也许拥有多个内核可以解决 IO 设备等资源匮乏的问题。 实时优先级线程和实时基优先级之间存在差异。后者适用于整个进程,无需额外设置各个线程的优先级,不会导致任何线程成为实时的。【参考方案2】:

简单地说,“实时”优先级高于“高”优先级。我认为没有比这更多的了。哦,是的 - 您必须拥有 SeIncreaseBasePriorityPrivilege 才能将线程放入 Real Time 类中。

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

Russinovich 关于 Windows 如何处理优先级的“Windows 内部”一章是了解其工作原理的绝佳资源:

http://web.archive.org/web/20140909124652/http://download.microsoft.com/download/5/b/3/5b38800c-ba6e-4023-9078-6e9ce2383e65/C06X1116607.pdf

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

【讨论】:

是的,如果您的线程没有太多可做但需要体验良好的响应时间,那么实时线程是合适的。 我知道我知道这是一篇旧文章,但我发现那本书的章节非常好......让我走了! google.ca/… 感谢 Archive.org 的 Wayback Machine,我找到了本书章节的链接:web.archive.org/web/20140909124652/http://…(顺便说一句,我强烈建议在 Chrome 中创建一个像这样的自定义搜索引擎:i.imgur.com/0kNVAi0.png)。然后您只需键入 wayback 并粘贴您所在的相同网址。您可能必须删除 http:// 前缀。【参考方案3】:

这将是最高可用的优先级设置,通常只用于专用于运行该特定程序的盒子。它实际上已经足够高,可能会导致键盘和鼠标线程缺乏响应,以至于它们变得无响应。

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

【讨论】:

同意。了解它的含义很重要(最优先考虑的是该线程,高于一切),但如果您发现自己询问是否应该使用它,您绝对不应该使用它。 不问怎么用,你要怎么学?我想你可以使用它,看看会发生什么然后你会学习,但我觉得你的学习令人沮丧【参考方案4】:

实时是进程可用的最高优先级。因此,它与“High”的不同之处在于它高出一级,而“Above Normal”的不同之处在于它高出两级。

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

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

所以,一个进程有一个:

    基础进程优先级各个线程优先级,基优先级的偏移量。

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

在 NT6+ (Vista+) 中,使用 Vista Multimedia Class Scheduler 是在不是实时操作系统中实现实时操作的正确方法。它在大多数情况下都可以工作,但并不完美,因为操作系统不是为实时操作而设计的。

Microsoft 认为此优先级非常危险,这是正确的。除非在非常特殊的情况下,否则任何应用程序都不应使用它,即使在这种情况下,也应尽量将其使用限制为临时需求。

【讨论】:

【参考方案5】:

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

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

我在我的多处理器 AMD CPU 上发现,如果我丢弃其中一个 CPU 而不是最后一个 CPU,CPU 使用率将达到 MAX OUT,最后一个 CPU 保持空闲状态。我的 Quad AMD 处理器速度提高到 75%。

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

【讨论】:

您说得对,只要不存在 CPU 争用,更改进程优先级类不会影响 CPU 利用率。但是,您认为 Windows 根据 CPU 利用率限制最大进程优先级是错误的。相反,安全权限可以防止设置“实时”以防止随意使用。 (多年后阅读)——这里的问题是线程不能被分割。因此,您可能有 8 个内核,但只有 2 个 CPU 绑定(100% 活动)线程。因此,您说“为什么不使用我的其他 6 个核心?”。或者,在您的情况下,“为什么不使用我的最后一个核心?”。其余的核心似乎什么都不做。这就是你想要的。如果线程从一个核心换到另一个核心,它会降低性能。应用开发者必须是多线程的,并不是所有的东西都可以是多线程的。【参考方案6】:

它基本上在其他所有方面都更高/更大。键盘的优先级低于实时进程。这意味着该过程将比键盘更快地被考虑在内,如果它无法处理,那么您的键盘就会变慢。

【讨论】:

【参考方案7】:

像所有其他答案一样,实时赋予该程序最高优先级。在处理该程序之前,不会处理任何内容。 在我的 pentium 4 机器上,我将 minecraft 设置为实时很多,因为它大大提高了游戏性能,并且系统看起来完全稳定。所以实时并不像看起来那么糟糕,只要你有一个多核设置程序对特定核心或核心的亲和力(只是不是全部,只是为了让其他一切都能够运行以防实时设置程序挂断)并将优先级设置为实时。

【讨论】:

以上是关于什么是“实时”进程优先级设置?的主要内容,如果未能解决你的问题,请参考以下文章

linux 进程优先级 之设置实时进程 (另一种方式是设置nice值)

进程优先级与调度策略

Android 进程管理篇(五)-调度策略与优先级

Linux的进程优先级NI和PR有啥区别

线程优先级

linux进程调度