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