Aumentos 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 reduzir a prioridade dinâmica, para garantir que ele seja responsivo e que nenhum thread fique faminto pelo tempo do processador. O sistema não aumenta a prioridade de threads com um nível de prioridade base entre 16 e 31. Somente threads com prioridade base entre 0 e 15 recebem aumentos de prioridade dinâmica.

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

  • Quando um processo que usa NORMAL_PRIORITY_CLASS é colocado em primeiro plano, o agendador aumenta a classe de prioridade do processo associado à janela em primeiro plano, de modo que ele seja maior ou igual à classe de prioridade de qualquer processo em segundo plano. A classe de prioridade 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 do 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 atendidas, o agendador aumenta a prioridade do thread. Por exemplo, quando uma operação de espera associada a E/S de disco ou teclado é concluída, o thread recebe um aumento de prioridade.

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

Depois de elevar 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 retorne à sua prioridade base. A prioridade dinâmica de um thread nunca é menor do que sua prioridade base.