Partilhar via


Impulsos de prioridade

Cada thread tem uma prioridade dinâmica . Essa é a prioridade que o agendador usa para determinar qual thread executar. Inicialmente, a prioridade dinâmica de um thread é a mesma que sua prioridade base. O sistema pode aumentar e diminuir a prioridade dinâmica, para garantir que ele seja responsivo e que nenhum thread fique sem tempo de processador. O sistema não aumenta a prioridade de threads com um nível de prioridade base entre 16 e 31. Apenas threads com uma prioridade básica entre 0 e 15 recebem impulsos de prioridade dinâmica.

O sistema aumenta a prioridade dinâmica de um thread para melhorar a sua capacidade de resposta da seguinte forma.

  • Quando um processo que usa NORMAL_PRIORITY_CLASS é trazido para o primeiro plano, o agendador aumenta a classe de prioridade do processo associada à janela de primeiro plano, para que ela seja maior ou igual à classe de prioridade de qualquer processo em segundo plano. A classe priority retorna à sua configuração original quando o processo não está mais em primeiro plano.

  • Quando uma janela recebe entrada, como mensagens de temporizador, mensagens de mouse ou entrada de teclado, o agendador aumenta a prioridade do thread que possui a janela.

  • Quando as condições de espera para um thread bloqueado são satisfeitas, o agendador aumenta a prioridade do thread. Por exemplo, quando uma operação de espera associada à E/S do disco ou teclado é concluída, o thread recebe um aumento de prioridade.

    Você pode desativar o recurso de aumento de prioridade chamando o SetProcessPriorityBoost ou função de SetThreadPriorityBoost. Para determinar se esse recurso foi desabilitado, chame o GetProcessPriorityBoost ou função de GetThreadPriorityBoost.

Depois de aumentar a prioridade dinâmica de um thread, o agendador reduz essa prioridade em um nível cada vez que o thread conclui uma fatia de tempo, até que o thread caia de volta para sua prioridade base. A prioridade dinâmica de um thread nunca é menor do que sua prioridade básica.