Serviço de Ordenação de Threads

O serviço de ordenação de thread controla a execução de um ou mais threads de cliente. 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 marcar se há uma nova solicitação, mesmo que o sistema esteja ocioso. Isso impede que o sistema durma por mais de 5 segundos, fazendo com que o sistema consuma mais energia. Se a eficiência de energia for essencial 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 thread chamando a função AvRtCreateThreadOrderingGroup . 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 ingressar em um grupo de ordenação de thread existente. Esses threads indicam se eles devem ser um predecessor ou sucessor do thread pai na ordem de execução. Espera-se que cada thread de cliente conclua uma determinada quantidade de processamento a cada período. Todos os threads dentro do grupo devem concluir a execução dentro do período mais o intervalo de tempo limite.

Os threads de um grupo de ordenação de threads incluem seu código de processamento dentro de um loop 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 predecessor é concluído com seu processamento, o controle de execução retorna à parte superior de seu loop de processamento e o thread chama AvRtWaitOnThreadOrderingGroup novamente para bloquear até o próximo turno. Depois que todos os threads predecessores chamarem essa função, o serviço de ordenação de threads poderá agendar o thread pai. Por fim, quando o thread pai conclui 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 eles ingressaram no grupo. Se todos os threads concluirem a execução antes do término de um período, todos os threads aguardarão até que o restante do período se desaiba antes que qualquer 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ção AvRtLeaveThreadOrderingGroup para remover a si mesmo 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 decorrer, ele será excluído do grupo.

O 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 passar. Quando o grupo de ordenação de threads é destruído, todas as chamadas para AvRtWaitOnThreadOrderingGroup de threads desse grupo falham ou expiram.