Eu tenho 2 aplicativos que estão usando muitos recursos do sistema. Quando diminuo a prioridade de um no Gerenciador de Tarefas, enquanto aumenta o outro, não percebo nenhuma melhora significativa na velocidade do aplicativo com a prioridade mais alta.
Por que é isso? Há mais coisas acontecendo ou mais que precisam ser feitas?
task-manager
priority
Moisés
fonte
fonte
Respostas:
A prioridade não ajuda quando o gargalo é a própria CPU. A prioridade realmente afeta o algoritmo de agendamento que o sistema operacional usa para determinar qual processo será executado a seguir, pois não há processadores suficientes na maioria dos sistemas para executar todos os processos continuamente.
Uma tarefa de prioridade mais alta chegará ao topo da fila mais rapidamente, portanto, isso ajudará na latência geral, mas se o processo estiver esgotando o intervalo de tempo inteiro, ele será alocado no cálculo real, o planejamento não mudará nada lá. Alterar a prioridade é mais útil quando você tem um processo aguardando E / S e deseja que ele seja mais responsivo.
fonte
Prioridade é o tempo da CPU. Todos os núcleos são 100% utilizados o tempo todo? Caso contrário, a prioridade não teria efeito. Muitas vezes, a CPU não é o gargalo e são recursos de memória, disco ou GPU.
fonte
A prioridade importa apenas quando há mais threads executáveis do que os núcleos de CPU disponíveis. Quando isso acontece, a prioridade controla quais threads são executados. Na maioria dos sistemas, não há computação suficiente acontecendo para qualquer contenção na CPU: os threads estão todos bloqueados , esperando que algo aconteça. Isso pode estar esperando você digitar alguma coisa, mover o mouse, tocar na tela ou chegar dados a partir do disco, da rede, de algum outro dispositivo conectado ou de outro segmento concluir o trabalho em dados críticos estrutura. Pode estar aguardando que parte do programa seja lida no disco ou em alguma memória que foi trocada para ser lida novamente, em vez de ler explicitamente um arquivo.
No Windows, o planejador mantém uma fila de threads executáveis em cada nível de prioridade. Quando toma uma decisão de agendamento - que um encadeamento tenha esgotado seu quantum (tempo permitido antes que outra coisa precise ser executada), o que significa que outro encadeamento deve ter uma curva, ou o encadeamento foi bloqueado e não pode mais ser executável ou uma prioridade mais alta o encadeamento 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 encadeamento em seu nível de prioridade que pode ser executado e não houver outros encadeamentos de alta prioridade, mas não em execução, ele terá outra chance.
Nos sistemas multicore / multiprocessador, pode haver restrições sobre os núcleos nos quais um thread pode executar. Além disso, o sistema tenta manter os encadeamentos no núcleo ideal e dentro do nó NUMA, para que os dados do encadeamento provavelmente ainda estejam no cache desse núcleo e tenham acesso rápido aos dados criados. Os threads ainda serão executados em núcleos não ideais, se não houver escolha do que executar em seguida.
O sistema utiliza 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 possam reagir rapidamente quando as operações de E / S forem concluídas (incluindo mouse, teclado e entrada na tela de toque). Além disso, o aumento de prioridade é usado para contornar inversões de prioridade, onde um encadeamento de alta prioridade aguarda um recurso que um encadeamento de baixa prioridade está mantendo no momento. Se também houver um encadeamento de prioridade média em execução, ele deixará de lado o encadeamento de baixa prioridade do tempo do processador, mantendo o encadeamento de alta prioridade. Portanto, o encadeamento de baixa prioridade é temporariamente aumentado para o de maior prioridade, assim obtém tempo e, esperançosamente, libera o recurso necessário ao encadeamento de alta prioridade.
Antes do Windows Vista, a prioridade do encadeamento não tinha efeito na 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 encadeamento, a menos que sua CPU esteja muito carregada, e mesmo assim o efeito será mínimo. Se o processo tiver que esperar por E / S ou não estiver disputando outros processos pelo tempo da CPU, ele já estará executando o mais rápido possível e a alteração da prioridade não o tornará mais rápido.
fonte
Em geral, é necessário um esforço extra para fazer um programa usar mais de uma CPU (adicionando multi-threading). Portanto, mesmo que o programa tenha a maior prioridade disponível, ele pode estar usando apenas um núcleo.
Outros possíveis problemas:
fonte
Mesmo aumentar a prioridade de E / S de um processo vinculado a E / S não necessariamente fará com que ele seja executado mais rapidamente. Por exemplo, se é um consumidor de dados produzidos por um processo separado, possivelmente remoto, e está acompanhando a taxa pela qual essa fonte produz os dados, não pode ir mais rápido ou ter uma taxa de transferência mais alta.
Ao contrário do que é categoricamente declarado na primeira frase da resposta atualmente aceita ( /superuser//a/752587/322588 ), as alterações de prioridade são mais eficazes quando a CPU é o gargalo, conforme explicado na resposta de Mike Dimmick ( /superuser//a/752864/322588 ). Além disso, a afirmação no segundo parágrafo da resposta aceita, "se o seu processo está esgotando toda a fatia de tempo, é alocado no cálculo real, então o agendamento não vai mudar nada lá" está completamente errado, a menos que o processo já tenha geralmente a maior prioridade de todas threads executáveis sempre que estiver aguardando a execução. Isso ocorre porque, em todas as outras circunstâncias, é provável que aumentar a prioridade obtenha mais timeslices por intervalo de relógio de parede.
Mike Dimmick apontou os problemas com esta resposta há alguns dias e forneceu uma resposta muito melhor, mas a primeira inexplicavelmente continua a ganhar votos. A alegação de seu autor de que ele está apenas emburrecendo sua resposta para nós, manequins, não é plausível, porque não é apenas simples, ou mesmo simplista, é completamente errada, pelo menos no que diz respeito aos processos ligados à CPU.
Disclaimer: Eu não conheço o Sr. Dimmick, embora eu possa dizer que ele sabe sobre o que está escrevendo.
fonte
timeBeginPeriod (...)
, o que qualquer coisa interativa já faz. Um jogo normalmente define isso como 1 quando é iniciado, e isso aplica um intervalo de agendamento de 1 ms em todo o tabuleiro para tudo que estiver sendo executado no sistema. Não está isolado apenas do processo que o fez. É parte do motivo pelo qual é difícil levar o Windows a sério para realizar várias tarefas.