Служба упорядочения потоков
Служба упорядочивания потоков управляет выполнением одного или нескольких клиентских потоков. Это гарантирует, что каждый клиентский поток будет выполняться один раз в течение указанного периода и в относительном порядке.
Windows Server 2003 и Windows XP: Служба заказа потоков доступна начиная с Windows Vista и Windows Server 2008.
Служба упорядочивания потоков по умолчанию отключена и должна быть запущена пользователем. Во время работы службы упорядочения потоков она активируется каждые 5 секунд, чтобы проверка, есть ли новый запрос, даже если система простаит. Это предотвращает спящий режим системы дольше 5 секунд, в результате чего система будет потреблять больше энергии. Если энергоэффективность имеет решающее значение для приложения, лучше не использовать службу упорядочения потоков и разрешить системному планировщику управлять выполнением потоков.
Каждый клиентский поток принадлежит к группе упорядочения потоков. Родительский поток создает одну или несколько групп упорядочения потоков, вызывая функцию AvRtCreateThreadOrderingGroup. Родительский поток использует эту функцию для указания периода для группы упорядочения потоков и интервала времени ожидания.
Дополнительные клиентские потоки вызывают функцию AvRtJoinThreadOrderingGroup для присоединения к существующей группе упорядочения потоков. Эти потоки указывают, должны ли они быть предшественником или преемником родительского потока в порядке выполнения. Ожидается, что каждый клиентский поток будет выполнять определенный объем обработки за каждый период. Все потоки в группе должны завершить выполнение в течение периода плюс интервал времени ожидания.
Потоки группы упорядочения потоков заключают свой код обработки в цикл, управляемый функцией AvRtWaitOnThreadOrderingGroup . Во-первых, потоки-предшественники выполняются по одному в порядке присоединения к группе, а родительские и последующие потоки блокируются при вызовах AvRtWaitOnThreadOrderingGroup. После завершения обработки каждого потока-предшественника управление выполнением возвращается в начало цикла обработки, и поток снова вызывает AvRtWaitOnThreadOrderingGroup для блокировки до следующего поворота. После того как все потоки-предшественники вызвали эту функцию, служба упорядочивания потоков может запланировать родительский поток. Наконец, когда родительский поток завершит обработку и снова вызывает AvRtWaitOnThreadOrderingGroup, служба упорядочивания потоков может запланировать последующие потоки по одному в порядке присоединения к группе. Если все потоки завершают выполнение до окончания периода, все потоки ожидают, пока не закончится оставшаяся часть периода, прежде чем они будут выполнены снова.
Если клиенту больше не нужно выполнять как часть группы упорядочения потоков, он вызывает функцию AvRtLeaveThreadOrderingGroup , чтобы удалить себя из группы. Обратите внимание, что родительский поток не должен удаляться из группы упорядочения потоков. Если поток не завершает выполнение до истечения периода и интервала ожидания, он удаляется из группы.
Родительский поток вызывает функцию AvRtDeleteThreadOrderingGroup для удаления группы упорядочения потоков. Группа упорядочения потоков также уничтожается, если родительский поток не завершает свое выполнение до истечения периода плюс истекает интервал времени ожидания. При уничтожении группы упорядочения потоков все вызовы AvRtWaitOnThreadOrderingGroup из потоков этой группы завершаются ошибкой или истекает время ожидания.