A prioridade só é importante quando há mais encadeamentos executáveis que os núcleos de CPU disponíveis. Quando isso acontece, a prioridade controla quais segmentos devem ser executados. Na maioria dos sistemas, não há computação suficiente para qualquer contenção na CPU: os threads estão todos bloqueados , esperando que algo aconteça. Isso pode estar esperando que você digite algo, mova o mouse, toque na tela ou que os dados cheguem do disco, da rede, de algum outro dispositivo que você conectou ou de outro encadeamento para terminar de trabalhar com dados críticos. estrutura. Ele pode estar esperando que parte do programa seja lida do disco ou alguma memória que foi trocada para ser lida de volta, em vez de ler explicitamente um arquivo.
No Windows, o agendador mantém uma fila de threads executáveis em cada nível de prioridade. Quando toma uma decisão de escalonamento - ou que um thread esgotou seu quantum (tempo permitido antes que algo precise ser executado), o que significa que outro thread deve ter um turno, ou o thread foi bloqueado e não é mais executável ou um encadeamento de prioridade mais alta foi desbloqueado - o próximo encadeamento na fila no nível de prioridade máxima com qualquer encadeamento executável será agendado. Se o encadeamento em execução esgotou seu quantum, ele será colocado no final da fila. Se for o único segmento em seu nível de prioridade que é executável, e não houver outros executáveis executáveis, mas não em execução, ele terá outro turno.
Em sistemas multicore / multiprocessadores, pode haver restrições em quais núcleos um thread pode ser executado. Além disso, o sistema tenta manter os threads em seu núcleo ideal e dentro de seu nó NUMA, de modo que os dados do segmento provavelmente ainda estejam no cache desse núcleo e tenham acesso rápido aos dados que ele criou. Threads ainda serão executados em núcleos não ideais se não houver escolha sobre o que executar em seguida.
O sistema faz uso de vários reforços de prioridade dinâmica e tamanhos quânticos dinâmicos para que o aplicativo em primeiro plano obtenha mais tempo (se necessário) do que os processos em segundo plano e para que os processos reajam rapidamente quando as operações de E / S forem concluídas , entrada de teclado e touchscreen). Além disso, o aumento de prioridade é usado para contornar inversões de prioridade, em que um encadeamento de alta prioridade está aguardando um recurso que um encadeamento de baixa prioridade está retendo atualmente. Se houver um encadeamento de prioridade média também em execução, ele reduzirá o encadeamento de baixa prioridade do tempo do processador, mantendo o encadeamento de alta prioridade. Assim, o encadeamento de baixa prioridade é temporariamente aumentado para a prioridade mais alta, de modo que ele consiga tempo e libere o recurso que o encadeamento de alta prioridade precisa.
Antes do Windows Vista, a prioridade do encadeamento não afetava a rapidez com que as operações de E / S eram concluídas. Desde o Windows Vista, as E / Ss também podem ter uma prioridade, que por padrão vem da prioridade do encadeamento.
Resumo: você não verá nenhum efeito de alterar as prioridades de thread, a menos que sua CPU esteja sobrecarregada e, mesmo assim, o efeito seja normalmente mínimo. Se o processo tiver que esperar pela E / S ou não estiver competindo com outros processos pelo tempo de CPU, ele já estará sendo executado da maneira mais rápida possível e a alteração da prioridade não tornará isso mais rápido.