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

88

根据我过去所了解的,你被鼓励不要通过编程方式更改Windows应用程序的优先级,如果你这样做,也不应将它们更改为“实时”。

与“高”和“高于正常”相比,“实时”进程优先级设置有什么作用?从低到实时的进程优先级列表。

8个回答

88

实时优先级线程无法被计时器中断抢占,并且比系统中的任何其他线程都具有更高的优先级。因此,CPU绑定的实时优先级线程可以完全破坏一台机器。

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

对于 Vista 及更高版本,应用程序如果确实需要以实时优先级运行,则可以使用多媒体类调度程序服务 (MMCSS) 并让其管理您的线程优先级。 MMCSS 将防止您的应用程序使用过多的 CPU 时间,因此您不必担心使机器瘫痪。


5
将单个随机进程(如视频游戏)设置为实时优先级,可能会对系统造成危险吗? 高优先级是否推荐?该应用程序是否会出现明显的性能下降? - mrfred
27
@mrfred,我不会说它是危险的,只是如果是一个大程序,它会使整个系统变慢。尝试将Minecraft的优先级设置为实时。相信我,这很有趣。你的鼠标会变慢,键盘需要5秒才能响应,并且explorer.exe会变得无响应! - AMDG
6
我个人曾经将《上古卷轴5:天际》游戏设置为高优先级和实时运行模式数月之久,发现这样可以使游戏运行更加流畅,只偶尔出现一些音频问题(原因不明)。我从未遇到过由此引起的任何问题……我认为如果出了什么大问题,系统至少会过热,但是当然,我不知道会出现哪些问题。也许具有多个核心可以消除对IO设备等资源的饥饿感。 - Totem
4
实时优先级线程和实时基本优先级类之间有区别。后者适用于整个进程,在未额外设置各个线程的优先级的情况下,不会使任何线程成为实时线程。 - dyasta
实时在时间共享系统中是一个自相矛盾的说法。没有用户线程需要实时。等等,你认为你比运行硬盘并执行程序所需的IO的线程更重要吗?祝你拥有一个稳定的系统。我觉得很有趣的是,人们认为Minecraft线程比鼠标、声卡或硬盘线程更重要。 - Luiz Felipe

28

简单来说,“实时”优先级类别高于“高”优先级类别。我认为除此之外就没有更多的内容了。哦对了,你必须拥有SeIncreaseBasePriorityPrivilege权限才能将线程放入实时类别。

Windows有时会提高线程的优先级,但它不会将线程的优先级提升到另一个优先级类别。它也不会提高实时优先级类别中的线程优先级。因此,高优先级线程不会在实时优先级类别中获得任何自动临时提升。

Russinovich在《Windows内部》一书中关于Windows如何处理优先级的章节是学习这个内容的好资源:

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


12
如果你有一个线程并不需要做太多事情,但必须保证良好的响应时间,那么实时线程是合适的选择。 - Artelius
我知道这是一篇旧帖子,但我发现那本书的章节真的很好...让我有了动力! - MotherDawg
1
我通过Archive.org的Wayback Machine找到了一本书的章节链接:http://web.archive.org/web/20140909124652/http://download.microsoft.com/download/5/b/3/5b38800c-ba6e-4023-9078-6e9ce2383e65/C06X1116607.pdf(顺便说一句,我强烈推荐在Chrome中制作一个自定义搜索引擎,就像这样:https://i.imgur.com/0kNVAi0.png)。然后你只需要输入wayback<tab>并粘贴相同的url即可。你可能需要删除http://前缀。 - Brent Rittenhouse
实时在时间共享系统中是一个自相矛盾的说法。没有用户线程需要实时。等等,你认为你比运行硬盘并执行程序所需的IO的线程更重要吗?祝你拥有一个稳定的系统。 - Luiz Felipe

17

这将是可用的最高优先级设置,通常仅用于专门运行该特定程序的计算机。它实际上高到足以导致键盘和鼠标线程饥饿,使它们无响应。

因此,基本上,如果你不知道如何使用,请不要使用它 :)


1
同意。了解它的含义非常重要(在所有其他事情之上,该线程被赋予了最高优先级),但如果你发现自己在问是否应该使用它,那么你绝对不应该使用它。 - Daniel T.
11
如果你不问如何使用它,那么你将如何学习使用它?我猜你可以尝试使用它并观察结果,然后你就会学会,但我认为这样会让你感到沮丧学习。 - fifamaniac04

3

实时是一个进程可用的最高优先级。因此,它与“高”不同,因为它更高一步,与“高于正常”不同,因为它更高两步。

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

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

因此,一个进程具有:

  1. 基本进程优先级类
  2. 各个线程优先级,偏移基本优先级类。

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

在NT6+(Vista+)中,使用Vista多媒体类调度程序是实现非实时操作中的实时操作的正确方法。它在很大程度上起作用,尽管不完美,因为操作系统并非设计用于实时操作。

微软认为这种优先级非常危险,这是正确的。除非在非常专业的情况下,否则没有应用程序应该使用它,即使在这种情况下,也要尽量将其使用限制为临时需求。


1

和其他回答一样,实时性能使得程序具有最高优先级。在该程序处理完之前,不会处理任何内容。
在我的Pentium 4机器上,我经常将Minecraft设置为实时模式,因为这可以大大提高游戏性能,而且系统似乎非常稳定。因此,实时并不像看起来那么糟糕,只需将多核设置为特定的核心或核心集(不要全部设置),以便让其他所有程序能够运行,以防实时设置程序卡住),并将优先级设置为实时。


1

一旦Windows学习到一个程序使用高于正常优先级,它似乎会限制该进程的优先级。

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

我发现在我的多处理器AMD CPU上,如果我关闭其中一个CPU,比如最后一个,CPU使用率将达到最大值,而最后一个CPU保持空闲。我的四核AMD处理器速度增加到75%。

使用任务管理器->选择进程->右键单击进程->选择->设置亲和性,除了最后一个处理器,其他都选中。剩余处理器的CPU使用率将增加到最大值,如果处理视频,则帧数也会增加。


2
你说得没错,改变进程优先级不会影响 CPU 利用率,只要没有争用 CPU。但是,你的想法是错误的,认为 Windows 根据 CPU 利用率限制最大进程优先级。相反,安全特权可以防止随意使用设置“实时”优先级。 - dyasta
1
(几年后阅读)- 这里的问题在于线程无法分割。因此,您可能拥有8个核心,但只有2个CPU绑定(100%活动)的线程。 因此,您会说“为什么我的其他6个核心没有被使用?” 或者,在您的情况下,“为什么我的最后一个核心没有被使用?” 剩余的核心似乎什么也没做。这正是您想要的。如果线程从核心到核心交换,它将降低性能。应用程序开发人员必须进行多线程处理,并且并非所有内容都可以进行多线程处理。 - dyasta

0

在其他方面,它基本上是更高/更大的。键盘不如实时进程重要。这意味着进程将比键盘更快地考虑到,如果无法处理,则会减慢键盘。


0

实时进程优先级主要用于使特定进程以牺牲其他一切的代价更快地运行。我个人将我的Discord机器人的进程优先级设置为实时,因为机器人很轻量化,我需要让它快速响应,但随意更改进程优先级是一个坏主意,除非你知道自己在做什么,例如,如果你将Google Chrome的优先级设置为低,它不会引起任何问题,但如果你将注册表的优先级设置为低,它可能会引起足够多的问题。除非设备完全专用于该程序,否则不要将重型程序设置为实时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接