多媒体类计划程序服务
多媒体类计划程序服务 (MMCSS) 使多媒体应用程序能够确保其时间敏感型处理接收对 CPU 资源的优先访问。 此服务使多媒体应用程序能够尽可能多地利用 CPU,而不会拒绝将 CPU 资源用于优先级较低的应用程序。
MMCSS 使用存储在注册表中的信息来标识支持的任务,并确定执行这些任务的线程的相对优先级。 执行与特定任务相关的工作的每个线程都会调用 AvSetMmMaxThreadCharacteristics 或 AvSetMmThreadCharacteristics 函数来通知 MMCSS 它正在处理该任务。
有关使用 MMCSS 的程序的示例,请参阅 独占模式流。
Windows Server 2003 和 Windows XP: MMCSS 不可用。
注册表设置
MMCSS 设置存储在以下注册表项中:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile
此键包含名为 SystemResponsiveness的REG_DWORD值,该值确定应保证用于低优先级任务的 CPU 资源百分比。 例如,如果此值为 20,则为低优先级任务保留 20% 的 CPU 资源。 请注意,不均匀地被 10 整除的值将向上舍入为最接近的 10 的倍数。 值 0 也被视为 10。
键还包含名为 Tasks 的子项,其中包含任务列表。 默认情况下,Windows 支持以下任务:
- 音频:
- 捕获
- Distribution
- 游戏
- 播放
- 专业音频
- 窗口管理器
OEM 可以根据需要添加其他任务。
每个任务键包含以下一组值,这些值表示要应用于与任务关联的线程的特征。
值 | 格式 | 可能值 |
---|---|---|
亲和力 | REG_DWORD | 指示处理器相关性的位掩码。 0x00和0xFFFFFFFF都指示不使用处理器相关性。 |
仅后台 | REG_SZ | 指示这是否是后台任务, (没有用户界面) 。 后台任务的线程不会因为窗口焦点的变化而更改。 此值可以设置为 True 或 False。 |
BackgroundPriority | REG_DWORD | 后台优先级。 值范围为 1-8。 |
时钟速率 | REG_DWORD | MMCSS 用于确定处理器资源计划的粒度的提示。Windows Server 2008 和 Windows Vista: 如果线程加入此任务,则系统使用的最大保证时钟速率,间隔为 100 纳秒。 从 Windows 7 和 Windows Server 2008 R2 开始,为了降低系统功耗,取消了此保证。 |
GPU 优先级 | REG_DWORD | GPU 优先级。 值的范围为 0-31。 此优先级尚未使用。 |
优先级 | REG_DWORD | 任务优先级。 值范围为 1 (低) 到 8 (高) 。对于 计划类别 为“高”的任务,此值始终被视为 2。 |
计划类别 | REG_SZ | 计划类别。 此值可以设置为“高”、“中”或“低”。 |
SFIO 优先级 | REG_SZ | 计划的 I/O 优先级。 此值可以设置为空闲、低、正常或高。 不使用此值。 |
注意
为了节省电源,除非绝对必要,否则应用程序不应将系统范围的计时器的分辨率设置为较小的值。 有关详细信息,请参阅 Windows 7 开发人员指南中的性能。
线程优先级
MMCSS 提高了处理高优先级多媒体任务的线程的优先级。
MMCSS 使用以下因素确定线程的优先级:
- 任务的基本优先级。
- AvSetMmThreadPriority 函数的 Priority 参数。
- 应用程序是否在前台。
- 每个类别中的线程占用的 CPU 时间。
MMCSS 根据客户端线程的计划类别设置客户端线程的优先级。
类别 | 优先级 | 说明 |
---|---|---|
高 | 23-26 | 这些线程以低于某些系统级任务的线程优先级运行。 此类别专为专业音频任务而设计。 |
中型 | 16-22 | 这些线程是前台应用程序的一部分。 |
低 | 8-15 | 此类别包含其余线程。 如果需要,可以保证其 CPU 资源的最小百分比。 |
1-7 | 这些线程已使用其 CPU 资源配额。 如果没有准备好运行低优先级线程,它们可以继续运行。 |