Partilhar via


Serviço de Encomenda de Threads

O serviço de ordenamento de threads controla a execução de um ou mais threads de clientes. Ele garante que cada thread do cliente seja executado uma vez durante o período especificado e em ordem relativa.

Windows Server 2003 e Windows XP: O serviço de ordenação de threads está disponível a partir do Windows Vista e do Windows Server 2008.

O serviço de ordenação de threads está desativado por padrão e deve ser iniciado pelo usuário. Enquanto o serviço de ordenação de threads está em execução, ele é ativado a cada 5 segundos para verificar se há uma nova solicitação, mesmo que o sistema esteja ocioso. Isso evita que o sistema entre em repouso por mais de 5 segundos, fazendo com que o sistema consuma mais energia. Se a eficiência energética for crítica para o aplicativo, é melhor não usar o serviço de ordenação de threads e, em vez disso, permitir que o agendador do sistema gerencie a execução de threads.

Cada thread de cliente pertence a um grupo de ordenação de threads . O thread pai cria um ou mais grupos de ordenação de threads chamando a funçãoAvRtCreateThreadOrderingGroup. O thread pai usa essa função para especificar o período para o grupo de ordenação de threads e um intervalo de tempo limite.

Threads de cliente adicionais chamam a função AvRtJoinThreadOrderingGroup para aderir a um grupo de ordenação de threads existente. Esses threads indicam se devem ser um predecessor ou um sucessor do thread pai na ordem de execução. Espera-se que cada thread do cliente conclua uma certa quantidade de processamento a cada período. Todos os threads dentro do grupo devem concluir sua execução dentro do período mais o intervalo de tempo limite.

Os threads de um grupo de ordenação de threads encapsulam o seu código de processamento dentro de um ciclo que é controlado pela função AvRtWaitOnThreadOrderingGroup. Primeiro, os threads predecessores são executados um de cada vez na ordem em que ingressaram no grupo, enquanto os threads pai e sucessor são bloqueados em suas chamadas para AvRtWaitOnThreadOrderingGroup. Quando cada thread predecessora conclui o seu processamento, o controlo da execução retorna ao início do seu ciclo de processamento e a thread chama novamente AvRtWaitOnThreadOrderingGroup para bloquear até à sua próxima vez. Depois que todos os threads antecessores tiverem chamado essa função, o serviço de ordenação de threads poderá agendar o thread pai. Finalmente, quando o thread pai termina seu processamento e chama AvRtWaitOnThreadOrderingGroup novamente, o serviço de ordenação de threads pode agendar os threads sucessores, um de cada vez, na ordem em que ingressaram no grupo. Se todos os threads concluírem sua execução antes que um período termine, todos os threads aguardarão até que o restante do período transcorra antes que qualquer um seja executado novamente.

Quando o cliente não precisa mais ser executado como parte do grupo de ordenação de threads, ele chama a funçãoAvRtLeaveThreadOrderingGroup para se remover do grupo. Observe que o thread pai não deve se remover de um grupo de ordenação de threads. Se um thread não concluir sua execução antes do período mais o intervalo de tempo limite, ele será excluído do grupo.

A thread pai chama a função AvRtDeleteThreadOrderingGroup para excluir o grupo de ordenação de threads. O grupo de ordenação de threads também será destruído se o thread pai não concluir sua execução antes do período mais o intervalo de tempo limite decorrer. Quando o grupo de ordenação de threads é destruído, quaisquer chamadas para AvRtWaitOnThreadOrderingGroup de threads desse grupo falham ou expiram.