线程排序服务
线程排序服务控制一个或多个客户端线程的执行。 它确保每个客户端线程在指定期间按相对顺序运行一次。
Windows Server 2003 和 Windows XP: 线程排序服务从 Windows Vista 和 Windows Server 2008 开始可用。
默认情况下,线程排序服务处于关闭状态,必须由用户启动。 当线程排序服务正在运行时,它会每 5 秒激活一次,以检查是否存在新请求,即使系统处于空闲状态也是如此。 这可以防止系统休眠超过 5 秒,从而导致系统消耗更多电量。 如果能效对应用程序至关重要,最好不要使用线程排序服务,而是允许系统计划程序管理线程的执行。
每个客户端线程都属于一个 线程排序组。 父线程通过调用 AvRtCreateThreadOrderingGroup 函数创建一个或多个线程排序组。 父线程使用此函数指定线程排序组的时间段和超时间隔。
其他客户端线程调用 AvRtJoinThreadOrderingGroup 函数以加入现有线程排序组。 这些线程指示它们在执行顺序中是父线程的前置线程还是后续线程。 每个客户端线程都应在每个期间完成一定数量的处理。 组内的所有线程都应在时间段内加上超时间隔内完成其执行。
线程排序组的线程将其处理代码包含在 由 AvRtWaitOnThreadOrderingGroup 函数控制的循环中。 首先,前置线程按照加入组的顺序一次执行一个,而父线程和后续线程在调用 AvRtWaitOnThreadOrderingGroup 时被阻止。 当每个前置线程完成其处理时,执行控制权将返回到其处理循环的顶部,线程再次调用 AvRtWaitOnThreadOrderingGroup 以阻止,直到其下一轮。 在所有前置线程都调用此函数后,线程排序服务可以计划父线程。 最后,当父线程完成其处理并再次调用 AvRtWaitOnThreadOrderingGroup 时,线程排序服务可以按照其加入组的顺序一次安排一个后续线程。 如果所有线程在时间段结束前完成其执行,则所有线程将等待该时间段的剩余时间过后,然后再次执行任何线程。
当客户端不再需要作为线程排序组的一部分运行时,它会调用 AvRtLeaveThreadOrderingGroup 函数以从组中删除自身。 请注意,父线程不应从线程排序组中删除自身。 如果线程未在时间段加上超时间隔之前完成其执行,则会从组中删除该线程。
父线程调用 AvRtDeleteThreadOrderingGroup 函数以删除线程排序组。 如果父线程未在时间段加上超时间隔之前完成其执行,则线程排序组也会被销毁。 当线程排序组被销毁时,从该组的线程对 AvRtWaitOnThreadOrderingGroup 的任何调用都失败或超时。